对于Ruby on Rails Heroku应用程序,如何将相关用户信息(不是全部)从一个生产数据库复制到另一个生产数据库
我在Heroku上有两个应用程序。 一个是生产应用程序,另一个是临时应用程序。 我在登台服务器上有一个新数据库。 我需要复制相关的用户信息,这些信息包含在某些表中。 我知道pgbackups插件,但它复制整个数据库。 我不想复制整个数据库,因为它太大了,而且大多数数据都无关紧要。
我只想要一小部分,与用户帐户有关。 有没有办法将生产数据库中的相关行复制到登台数据库? 我可以编写Ruby on Rails查询来获取信息,但似乎无法将其保存到另一个数据库。 我需要采取哪些步骤来复制用户数据,还是有一些解决方法可以做同样的事情?
您可以使用要导出的数据从生产应用程序向登台应用程序发送特定请求,并将其存储在登台数据库中。
我一直在使用YamlDb来保存我的数据库的状态。
使用以下命令安装它:
script/plugin install git://github.com/adamwiggins/yaml_db.git
使用rake任务将Rails数据库的内容转储到db / data.yml
rake db:data:dump
使用rake任务将db / data.yml的内容加载到数据库中
rake db:data:load
这是创作者的主页:
http://blog.heroku.com/archives/2007/11/23/yamldb_for_databaseindependent_data_dumps/
我最近用我想传输的数据写出了json,并在另一端导入了它。
有些人喜欢:
File.open("users.json", "wb") do |f| f << User.where(condition: true).to_json end
在另一个数据库:
users_json = JSON.parse(File.read("users.json")) users_json.each do |json| User.create json end
如果您需要在数据库之间复制某些数据部分,Postgres扩展dblink
可能是一个不错的选择。 您可以连接到目标数据库并运行类似的操作(注意:您可能需要阅读一些文档来确定连接语法):
CREATE EXTENSION dblink; INSERT INTO table SELECT * FROM dblink('...', 'select name from table') AS remote(name text);
我最近发布了一个名为forceps的库,您可以使用它从不同的数据库导入活动记录模型。
您需要做的第一件事是为生产数据库配置Active Record连接。 Heroku允许您使用以下命令获取Postgres数据库凭据:
heroku pg:credentials --app
使用这些凭据,您可以在database.yml
文件中配置名为remote
的节点。
remote: adapter: postgresql host: ... port: 5432 username: ... password: ... database: ... encoding: utf8
现在,您可以准备一个脚本,将生产中的东西复制到您正在使用的默认环境中。 您可以在开发中测试此脚本,然后在分段上运行它。
例如,如果要复制所有帐户,则该脚本可能类似于:
Rails.application.eager_load! Forceps.configure Forceps::Remote::Account.find_each do |remote_account| remote_account.copy_to_local end
Forceps允许您配置要复制的对象 。 默认情况下,它将探索并复制所有关联的对象。 这意味着它会将所有相关数据复制到每个帐户,这可能不是您想要的。
此外,您可以使用远程类#copy_to_local
Forceps::Remote::
作为任何其他活动记录模型,而不是使用#copy_to_local
。 然后,您可以手动复制所需的任何内容:
remote_account = Forceps::Remote::Account.find_by_email 'some@email.com' local_account = Account.create!(email: remote_account.email)
- RMagick + Rails + Heroku?
- Heroku的神秘短暂文件系统不让我从S3获取文件
- 调试Heroku应用程序时如何避免大量提交
- 如何从travis-ci在heroku上部署rails应用程序?
- Heroku app崩溃错误H10 ..无法解决,请帮忙
- Heroku + Rails 3.1:asset_path未定义?
- Heroku / Rails:如何在Heroku上安装GNU Scientific Library(GSL)?
- 文件上传进度条与回形针上的回形针
- Rails 5 Heroku部署错误:ExecJS :: ProgramError:SyntaxError:意外的令牌:name(autoRegisterNamespace)