浏览 2582 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-08-23 关键字: ruby,rails,migration,fixture
如何用migration的办法将数据在不同的rails环境数据库之间迁移?
可以用rails的migration方式,也可以用数据库自带的备份还原方式 数据库备份还原方式: mysqldump -u user -p password dev_database > dev.sql mysql -u user -p password produ_database < dev.sql rails的migration方法: 将当前环境数据库所有数据dump出来,保存到test/fixtures/×yml 切换当前rails环境 在当前环境下将yaml文件加载到数据库 具体做法是给当前rails添加一个rake任务,名字是db:fixtures:dump,将rake任务代码放在lib/tasks/目录下,文件名为db_fixtures_dump.rake ruby 代码
如果把development环境下的数据dump出来,执行 ruby 代码
如果想把fixutes文件载入到production环境,执行 ruby 代码
这个办法可以很方便的将遗留系统中的数据库数据dump出来,然后通过migration脚本方式生产development环境数据库 首先把遗留数据库配置为rails的production环境数据库 ruby 代码
拿到数据库schema.rb,创建一个新的migration脚本,将schema.rb里面的内容写入migration脚本中,执行 ruby 代码
产生development数据库的schema. 将production环境的数据库数据dump到test/fixtures下×.yml文件,然后复制到db/migrate目录下新建的dev_data目录下,创建一个新的migration脚本 ruby 代码
再次执行 ruby 代码
这样两个脚本就可以产生一个完整可用并且跟原来遗留数据库一致的development环境数据库了. 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-09-29
谢谢你的文章,对我很有帮助。
但是有一个问题,就是导出来的yml文件中,数据库里的中文数据都变成了乱码了。 比如: const_provinces_001: name: !binary | 5YyX5Lqs code: "11" id: "1" seq: "1" 本来它的name应该是"北京"的 我的数据库及所有文件都使用的是utf8编码的,怎么解决呢? |
|
| 返回顶楼 | |
|
时间:2007-09-30
那不是乱码,就是把中文字符存为binary格式,具体原因是ruby内部处理string不是按照utf-8方式来处理的。
你可以把fixture文件load回去数据库,或者用YAML.load方法读回来,然后查看name还是“北京” 顺便不要忘记设置 $KCODE = 'u' |
|
| 返回顶楼 | |
|
时间:2007-10-08
load回去之后,的确还是“北京”,但就是在yaml文件中没有可读性,查看和修改都非常不方便。
真的没有解决的方法了? |
|
| 返回顶楼 | |





