Create a new Ruby on Rails application using MySQL instead of SQLite

MysqlRuby on-RailsRuby

Mysql Problem Overview


I want to create my Rails application with MySQL, because I like it so much. How can I do that in the latest version of Rails instead of the default SQLite?

Mysql Solutions


Solution 1 - Mysql

Normally, you would create a new Rails app using

rails ProjectName

To use MySQL, use

rails new ProjectName -d mysql

Solution 2 - Mysql

If you already have a rails project, change the adapter in the config/database.yml file to mysql and make sure you specify a valid username and password, and optionally, a socket:

development:
  adapter: mysql2
  database: db_name_dev
  username: koploper
  password:
  host: localhost
  socket: /tmp/mysql.sock

Next, make sure you edit your Gemfile to include the mysql2 or activerecord-jdbcmysql-adapter (if using jruby).

Solution 3 - Mysql

For Rails 3 you can use this command to create a new project using mysql:

$ rails new projectname -d mysql

Solution 4 - Mysql

Go to the terminal and write:

rails new <project_name> -d mysql

Solution 5 - Mysql

If you have not created your app yet, just go to cmd(for windows) or terminal(for linux/unix) and type the following command to create a rails application with mysql database:

$rails new <your_app_name> -d mysql

It works for anything above rails version 3. If you have already created your app, then you can do one of the 2 following things:

  1. Create a another_name app with mysql database, go to cd another_name/config/ and copy the database.yml file from this new app. Paste it into the database.yml of your_app_name app. But ensure to change the database names and set username/password of your database accordingly in the database.yml file after doing so.

OR

  1. Go to cd your_app_name/config/ and open database.yml. Rename as following:

development:
adapter: mysql2
database: db_name_name
username: root
password:
host: localhost
socket: /tmp/mysql.sock

Moreover, remove gem 'sqlite3' from your Gemfile and add the gem 'mysql2'

Solution 6 - Mysql

If you are using rails 3 or greater version

rails new your_project_name -d mysql

if you have earlier version

rails new -d mysql your_project_name

So before you create your project you need to find the rails version. that you can find by

rails -v

Solution 7 - Mysql

rails -d mysql ProjectName

Solution 8 - Mysql

rails new <project_name> -d mysql

OR

rails new projectname

Changes in config/database.yml

development:
  adapter: mysql2
  database: db_name_name
  username: root
  password:
  host: localhost
  socket: /tmp/mysql.sock

Solution 9 - Mysql

Create application with -d option

rails new AppName -d mysql

Solution 10 - Mysql

$ rails --help 

is always your best friend

usage:

$ rails new APP_PATH[options]

also note that options should be given after the application name

rails and mysql

$ rails new project_name -d mysql

rails and postgresql

$ rails new project_name -d postgresql

Solution 11 - Mysql

You should use the switch -D instead of -d because it will generate two apps and mysql with no documentation folders.

  rails -D mysql project_name  (less than version 3)

  rails new project_name -D mysql (version 3 and up)

Alternatively you just use the --database option.

Solution 12 - Mysql

If you are creating a new rails application you can set the database using the -d switch like this:

rails -d mysql myapp

Its always easy to switch your database later though, and using sqlite really is easier if you are developing on a Mac.

Solution 13 - Mysql

In Rails 3, you could do

$rails new projectname --database=mysql

Solution 14 - Mysql

Just go to rails console and type:

rails new YOURAPPNAME -d mysql

Solution 15 - Mysql

On new project, easy peasy:

rails new your_new_project_name -d mysql

On existing project, definitely trickier. This has given me a number of issues on existing rails projects. This kind of works with me:

# On Gemfile:
gem 'mysql2',  '>= 0.3.18', '< 0.5' # copied from a new project for rails 5.1 :)
gem 'activerecord-mysql-adapter' # needed for mysql..

# On Dockerfile or on CLI:
sudo apt-get install -y  mysql-client libmysqlclient-dev 

Solution 16 - Mysql

First make sure that mysql gem is installed, if not? than type following command in your console

gem install mysql2

Than create new rails app and set mysql database as default database by typing following command in your console

rails new app-name -d mysql

Solution 17 - Mysql

Use following command to create new app for API with mysql database

rails new <appname> --api -d mysql


  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: 
  socket: /var/run/mysqld/mysqld.sock

Solution 18 - Mysql

database.yml

# MySQL. Versions 5.1.10 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: localhost
  database: database_name
  username: username
  password: secret

development:
  <<: *default

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default

# As with config/secrets.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password as a unix environment variable when you boot
# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full rundown on how to provide these environment variables in a
# production deployment.
#
# On Heroku and other platform providers, you may have a full connection URL
# available as an environment variable. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# You can use this database configuration with:
#
#   production:
#     url: <%= ENV['DATABASE_URL'] %>
#
production:
  <<: *default

Gemfile:

# Use mysql as the database for Active Record
gem 'mysql2', '>= 0.4.4', '< 0.6.0'

Solution 19 - Mysql

you first should make sure that MySQL driver is on your system if not run this on your terminal if you are using Ubuntu or any Debian distro

sudo apt-get install mysql-client libmysqlclient-dev

and add this to your Gemfile

gem 'mysql2', '~> 0.3.16'

then run in your root directory of the project

bundle install

after that you can add the mysql config to config/database.yml as the previous answers

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaniel BroekmanView Question on Stackoverflow
Solution 1 - MysqlDaniel BroekmanView Answer on Stackoverflow
Solution 2 - MysqlMichiel de MareView Answer on Stackoverflow
Solution 3 - MysqlRobbie DoneView Answer on Stackoverflow
Solution 4 - MysqlAbhinavView Answer on Stackoverflow
Solution 5 - MysqlDrake MandinView Answer on Stackoverflow
Solution 6 - MysqlCoderView Answer on Stackoverflow
Solution 7 - MysqlhuacnleeView Answer on Stackoverflow
Solution 8 - Mysqlvijay chouhanView Answer on Stackoverflow
Solution 9 - MysqlDipali NagraleView Answer on Stackoverflow
Solution 10 - MysqlGeorge BellosView Answer on Stackoverflow
Solution 11 - MysqlMarthinus A. BothaView Answer on Stackoverflow
Solution 12 - MysqlJames AveryView Answer on Stackoverflow
Solution 13 - Mysqlandy318View Answer on Stackoverflow
Solution 14 - MysqlAmarpreet JethraView Answer on Stackoverflow
Solution 15 - MysqlRiccardoView Answer on Stackoverflow
Solution 16 - MysqlShabbirView Answer on Stackoverflow
Solution 17 - MysqlDinesh VaitageView Answer on Stackoverflow
Solution 18 - MysqlartamonovdevView Answer on Stackoverflow
Solution 19 - MysqlMuhammad ElbadawyView Answer on Stackoverflow