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

Rails rake任务,用于将实时(MySQL)数据库加载到本地开发数据库,mysql,ruby-on-rails,rake,Mysql,Ruby On Rails,Rake,多年来,我一直使用ssh管道从live server上的mysqldump到开发机器上的mysql获取当前数据的副本 ssh -C <server> mysqldump --opt <live_database_name> |mysql <local_dev_database_name> ssh-cmysqldump--opt | mysql 其中-C启用ssh压缩,而--opt启用快速性和完整性 是否有人对此有类似rails的rake任务?理想情况下,如

多年来,我一直使用ssh管道从live server上的
mysqldump
到开发机器上的
mysql
获取当前数据的副本

ssh -C <server> mysqldump --opt <live_database_name> |mysql <local_dev_database_name>
ssh-cmysqldump--opt | mysql
其中
-C
启用ssh压缩,而
--opt
启用快速性和完整性


是否有人对此有类似rails的rake任务?理想情况下,如果您对Ruby的编码没有问题,那么它应该从config/database.yml中获取数据库名称,您可能需要研究和使用它

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


祝你好运

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

这里有一个我用于Postgres数据库的数据库:

有三个任务:
db:download
db:replace
db:restore
db:restore
只是对另外两个的包装

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

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

但您可以将它放在SCM的lib/tasks下,与团队中的其他开发人员共享。它还使用现有config/database.yml文件中的配置数据。您只需向该文件添加另一个分支即可定义live db,并且它使用与Rails相同的键名


也许重用生产数据库配置是有意义的。

与其使用rake,不如使用capistrano任务,因为您的capistrano任务已经知道生产服务器在哪里,等等。

嗯,我不是在寻找伪造的/种子数据解决方案,用于将实时数据库加载到本地开发数据库的通用rake任务。如果没有实时数据,很难诊断实时数据的问题:-)Ok noodl。希望你能找到你想要的!要让rake运行上面的命令模板来替换config/database.yml中的值是非常容易的,但是在大多数应用程序中没有存储实时服务器主机名的位置(原因很明显)。如果我使用其中一个,也许卡皮斯特拉诺/托尔会更好地解决这个问题。不过,像上面的命令一样,我发现可以使用单个命令行(假设是git)完成部署。这看起来就像是文件复制之外的票据,而不是ssh上的管道部分。我明天会考虑把它修改一下以满足我的需要。谢谢你说得很对,capistrano将是实现这一点的一个很好的选择,但我通常不使用它,而是希望有一个只依赖rails/rake的解决方案。这看起来就像是一张罚单。非常感谢。做得很好,赢得了赏金作为你的第一分。好孩子,你会成为明星;-)