Heroku Rails Rake Task to Sync Production & Local DB



我正在尝试创建一个rake任务,以便我可以简单地键入"rake db:sync",以便更新我的本地db以匹配生产。

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

当我使用curl时——output/tmp/latest。我在我的最新版本中得到以下错误。转储文件:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AuthorizationQueryParametersError</Code><Message>Query-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.</Message><RequestId>421FEFF763870123</RequestId><HostId>vlVr/ihmQiDgYIpdFFkuCgEP8Smvr2ks0wRkf89fJ8NfHfsBb92EVv40Q0NZuQIC</HostId></Error>

这是我正在使用的代码。

    #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. 恢复DB的
  3. 运行rails console
  4. <
  5. 尾日志/gh><
  6. 运行迁移/gh>

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

安装后,它期望您有两个名为stagingproductiongit remote值集。不需要development,因为假定它是您的本地计算机。

你可以从你的Heroku仪表盘->(你的应用程序)->设置->信息

获取其他两个环境的git url

设置好之后,就像

一样简单
production backup
development restore production

代码非常简单,所以我建议您阅读它。但它本质上做的正是您的rake代码试图通过获取公共URL并恢复它来做的事情。

相关内容

最新更新