将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,只能用于增量迁移!)