Heroku Rails Rake任务同步生产和本地DB

我正在尝试创建一个rake任务,这样我就可以直接输入“rake db:sync”来更新我的本地数据库以匹配生产。

此解决方案利用Heroku团队提供的代码: 使用PG备份导入和导出Heroku Postgres数据库

当我使用curl –output /tmp/latest.dump# {url}时,我的latest.dump文件中出现以下错误:

 AuthorizationQueryParametersErrorQuery-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.421FEFF763870123vlVr/ihmQiDgYIpdFFkuCgEP8Smvr2ks0wRkf89fJ8NfHfsBb92EVv40Q0NZuQIC 

这是我正在使用的代码。

  #lib/tasks/db_sync.rake namespace :db do desc 'Pull production db to development' task :sync => [:backup, :dump, :restore] task :backup do Bundler.with_clean_env { puts 'Backup started...' system "heroku pg:backups capture --app YOUR_APP_NAME" puts 'Backup complete!' } end task :dump do dumpfile = "#{Rails.root}/tmp/latest.dump" puts 'Fetching url and file...' Bundler.with_clean_env { url = `heroku pg:backups public-url --app YOUR_APP_NAME | cat` system "curl --output #{dumpfile} #{url}" } puts 'Fetching complete!' end task :restore do dev = Rails.application.config.database_configuration['development'] dumpfile = "#{Rails.root}/tmp/latest.dump" puts 'PG_RESTORE on development database...' system "pg_restore --verbose --clean --no-acl --no-owner -h localhost -U #{dev['username']} -d #{dev['database']} #{dumpfile}" puts 'PG_RESTORE Complete!' end end 

查看奇偶校验gem 。 它提供了几个命令来轻松执行以下Heroku Rails任务 –

  1. 备份数据库
  2. 恢复数据库
  3. 运行rails console
  4. 尾部日志
  5. 运行迁移
  6. 部署

你当然主要是在寻找前两个。

安装后,它希望您有两个git remote值设置为名为stagingproduction 。 不需要development ,因为它被认为是您的本地机器。

您可以从Heroku仪表板获取其他两个环境的giturl – >(您的应用) – >设置 – >信息

完成设置后,就像这样简单

 production backup development restore production 

代码很简单,所以我鼓励你阅读它。 但它实际上正是通过获取公共URL并恢复它来完成你的rake代码尝试做的事情。