多年来,我一直使用实时服务器上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
获取数据库名称答案 0 :(得分:4)
https://gist.github.com/750129
这不是一个优雅的解决方案。它基本上是旧方法的包装器,因此它甚至与其他数据库驱动程序不兼容。
但是您可以在lib / tasks下将其放入SCM中,以便与团队中的其他开发人员共享。它还使用现有config / database.yml文件中的配置数据。您可以通过简单地向该文件添加另一个分支来定义实时数据库,它使用与Rails相同的密钥名称。
重新使用生产数据库配置可能更有意义。
答案 1 :(得分:2)
这是我用于Postgres数据库的一个:https://gist.github.com/748222。
有三项任务:db:download
,db:replace
和db:restore
。 db:restore
只是其他两个的包装。
我会说你也可以很快地为Mysql做类似的事情。我只是在这种情况下使用最新的备份,而不是在运行时创建它。
答案 2 :(得分:1)
如果您使用Ruby编码很好,可能需要查看seed-fu和activerecord-import。
哦,我忘了提及standalone-migrations。它附带了一个用于模式迁移的Rake任务。
祝你好运!答案 3 :(得分:1)
我没有使用rake来执行此操作,而是使用capistrano任务,因为你的capistrano任务已经知道生产服务器的位置等等......
答案 4 :(得分:0)
理论上你应该能够在database.yml中创建另一个“实例”(对于你的实时服务器)并在那里放置正确的主机(并保留其余的用户名/密码等)。在你的rake任务中,你将加载数据库yaml文件,读取主机并继续你的命令行slurpiness。它可以很容易地包含在rake任务中。