I made an app in Ruby on Rails and now I want to get it hosted. However, they require that I use MySQL and I set it up using sqLite3. Is there any way to convert it to use MySQL?
The quickest and easiest way to convert SQLite to MySQL is by exporting an SQL Database to a Dump File, and then importing the SQLite Dump into MySQL Database. You can export an SQLite Database to Dump File using the . dump command.
Rails defaults to using a SQLite database when creating a new project, but you can always change it later.
To be safe, I recommend experimenting a bit with this technique in a virtual machine. Save yourself a bunch of heartache and build a virtual machine, check out your code, and have a safe playground that you can throw away if tragedy strikes.
Make a backup copy of your database.yml file.
(from your application root)
cp config/database.yml config.database.yml.sqlite3
Make a backup copy of your data
For Rails 3, install the YAML DB gem: https://github.com/ludicast/yaml_db
For Rails 2.x install the YAML DB plugin:
script/plugin install git://github.com/adamwiggins/yaml_db.git
Run the dump task
rake db:dump
Update your config/database.yml file. You will find entries like
development: adapter: sqlite3 database: db/development.sqlite3 timeout: 5000 test: adapter: sqlite3 database: db/test.sqlite3 timeout: 5000 production: adapter: sqlite3 database: db/production.sqlite3 timeout: 5000
Change them to
development: adapter: mysql encoding: utf8 reconnect: false database: **myapp_development** pool: 5 username: **root** password: **supersecretpassword** **socket: /opt/local/var/run/mysql5/mysqld.sock** test: adapter: mysql encoding: utf8 reconnect: false database: **myapp_test** pool: 5 username: **root** password: **supersecretpassword** socket: **/opt/local/var/run/mysql5/mysqld.sock** production: adapter: mysql encoding: utf8 reconnect: false database: **myapp_production** pool: 5 username: **root** password: **supersecretpassword** socket: **/opt/local/var/run/mysql5/mysqld.sock**
Be sure to update the values surrounded by asterix as appropriate for your platform! The socket value is only good for Mac OSX using MacPorts. Most flavors of linux do not require this value.
If you have some errors in the following step, you might have to install the mysql gem:
sudo gem install mysql
Have rake create your database
rake db:create rake db:schema:load
Use YamlDb to reload your data into MySql
rake db:load
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With