将Ruby on Rails应用程序从sqlite转换为MySQL?

我在Ruby on Rails上做了一个应用程序,现在我想把它托pipe起来。 但是,他们要求我使用MySQL,并使用sqLite3进行设置。 有没有办法将其转换为使用MySQL?

第0步

为了安全起见,我build议在虚拟机中使用这种技术进行一些尝试。 为自己节省一些心痛,build立一个虚拟机,检查你的代码,并build立一个安全的游乐场,如果发生悲剧,你可以扔掉。

步骤1

制作你的database.yml文件的备份副本。

(从您的应用程序根目录)

cp config/database.yml config.database.yml.sqlite3

第2步

制作数据的备份副本

对于Rails 3,安装YAML DB gem: https : //github.com/ludicast/yaml_db

对于Rails 2.x,安装YAML DB插件:

script/plugin install git://github.com/adamwiggins/yaml_db.git

运行转储任务

rake db:dump

第3步

更新你的config / database.yml文件。 你会发现像条目

 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 

改变他们

 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** 

请务必根据您的平台更新asterix包围的值! 套接字值仅适用于使用MacPorts的Mac OSX。 大多数linux的口味都不需要这个值。

第5步

如果你在下面的步骤中有一些错误,你可能需要安装mysql gem:

 sudo gem install mysql 

有耙创build你的数据库

 rake db:create rake db:schema:load 

第6步

使用YamlDb将数据重新加载到MySql中

rake db:load

只要你没有写在sqlLite3中运行的任何SQL语句,而不是MySQL(如果你所有的数据库访问都是通过ActiveRecord和ActiveRecord迁移的话你不会有),那么你只需要改变数据库中的数据库适配器.ymlconfiguration文件。

检查水龙头 。 我已经成功地将一个Mysql数据库转换为Postgres,它应该支持SQLite。

编辑:包括来自cony的评论在这里的工作链接。

 myproject user$ cd user $ rails new myproject -d mysql 

对所有问题说“不”,但是Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh] Overwrite .../myproject/config/*database.yml*? (enter "h" for help) [Ynaqdh]说'是'。

如果没有要迁移的数据,只需更新database.yml并在新环境中运行“rake db:schema:load”即可。 (NOT db:migrate,只能用于增量迁移!)