Ruby on rails Heroku Rails Rake任务同步生产和;本地数据库

Ruby on rails Heroku Rails Rake任务同步生产和;本地数据库,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,heroku,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Heroku,我正在尝试创建一个rake任务,这样我就可以简单地键入“rakedb:sync”来更新本地数据库以匹配生产 此解决方案利用Heroku团队提供的代码: 当我使用curl--output/tmp/latest.dump{url}时,我在latest.dump文件中遇到以下错误: <?xml version="1.0" encoding="UTF-8"?> <Error><Code>AuthorizationQueryParametersError</Co

我正在尝试创建一个rake任务,这样我就可以简单地键入“rakedb:sync”来更新本地数据库以匹配生产

此解决方案利用Heroku团队提供的代码:

当我使用curl--output/tmp/latest.dump{url}时,我在latest.dump文件中遇到以下错误:

<?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
看看这本书。它提供了几个命令来轻松完成以下任务-

  • 备份数据库
  • 还原数据库
  • 运行rails控制台
  • 尾木
  • 运行迁移
  • 部署
  • 你当然主要是在寻找前两个

    安装后,它希望您有两个名为
    staging
    production
    git-remote
    值集<不需要代码>开发
    ,因为它被假定为您的本地机器

    您可以从Heroku dashboard->(您的应用程序)->Settings->Info获取其他两个环境的git url

    设置好之后,就可以像

    production backup
    development restore production
    

    代码非常简单,因此我鼓励您阅读它。但实际上,它正是通过获取一个公共URL并还原它来完成rake代码试图做的事情

    我要试试这个。学习如何在heroku中设置登台环境对我来说是一个很好的实践,看起来比我预期的要容易。我仍然希望看到一个解决这个简单问题的“耙子”解决方案。效果非常好。虽然该解决方案确实需要我设置一个登台环境。因此,如果您遵循代码,它会在几个类和几个文件之间跳跃,但其核心基本上只是将两个用于还原的命令拼凑在一起—(1)查找公共URL和(2)将其还原到任何环境。您可以将它们组合在一起,并将它们粘贴到一个rake任务中,尽管gem是一个方便的包,因此不确定这种方法的优势。祝你好运!