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


Translate

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?


Alle Antworten
  • Translate

    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).


  • Translate

    Normally, you would create a new Rails app using

    rails ProjectName
    

    To use MySQL, use

    rails new ProjectName -d mysql
    

  • Translate

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

    $ rails new projectname -d mysql
    

  • Translate

    Go to the terminal and write:

    rails new <project_name> -d mysql
    

  • Translate

    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'


  • Translate

    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
    

  • Translate
    rails -d mysql ProjectName
    

  • Translate
    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
    

  • Translate

    Create application with -d option

    rails new AppName -d mysql
    

  • Translate
    $ 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
    

  • Translate

    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.


  • Translate

    Just go to rails console and type:

    rails new YOURAPPNAME -d mysql
    

  • Translate

    In Rails 3, you could do

    $rails new projectname --database=mysql
    

  • Translate

    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.


  • Translate

    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 
    

  • Translate

    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
    

  • Translate

    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
    

  • Translate

    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'