Rails rake任务将实时(MySQL)数据库加载到本地开发数据库

时间:2010-11-25 12:28:11

标签: mysql ruby-on-rails rake

多年来,我一直使用实时服务器上mysqldump的ssh管道到我的开发机器上的mysql来获取当前数据的副本。

ssh -C <server> mysqldump --opt <live_database_name> |mysql <local_dev_database_name>

-C启用ssh压缩,--opt启用快速和完整性。

有没有人有这样的rails-ish等效rake任务?理想情况下,它需要从config / database.yml

获取数据库名称

5 个答案:

答案 0 :(得分:4)

https://gist.github.com/750129

这不是一个优雅的解决方案。它基本上是旧方法的包装器,因此它甚至与其他数据库驱动程序不兼容。

但是您可以在lib / tasks下将其放入SCM中,以便与团队中的其他开发人员共享。它还使用现有config / database.yml文件中的配置数据。您可以通过简单地向该文件添加另一个分支来定义实时数据库,它使用与Rails相同的密钥名称。

重新使用生产数据库配置可能更有意义。

答案 1 :(得分:2)

这是我用于Postgres数据库的一个:https://gist.github.com/748222

有三项任务:db:downloaddb:replacedb:restoredb:restore只是其他两个的包装。

我会说你也可以很快地为Mysql做类似的事情。我只是在这种情况下使用最新的备份,而不是在运行时创建它。

答案 2 :(得分:1)

如果您使用Ruby编码很好,可能需要查看seed-fuactiverecord-import

哦,我忘了提及standalone-migrations。它附带了一个用于模式迁移的Rake任务。

祝你好运!

答案 3 :(得分:1)

我没有使用rake来执行此操作,而是使用capistrano任务,因为你的capistrano任务已经知道生产服务器的位置等等......

答案 4 :(得分:0)

理论上你应该能够在database.yml中创建另一个“实例”(对于你的实时服务器)并在那里放置正确的主机(并保留其余的用户名/密码等)。在你的rake任务中,你将加载数据库yaml文件,读取主机并继续你的命令行slurpiness。它可以很容易地包含在rake任务中。