【问题标题】:Heroku Rails Rake Task to Sync Production & Local DBHeroku Rails Rake 任务同步生产和本地数据库
【发布时间】:2016-01-05 13:45:31
【问题描述】:

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

此解决方案利用 Heroku 团队在此处提供的代码: Importing and Exporting Heroku Postgres Databases with PG Backups

当我使用 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

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4 heroku


    【解决方案1】:

    查看Parity gem。它提供了几个命令来轻松完成以下 Heroku Rails 任务 -

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

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

    安装后,它希望您有两个 git remote 值集,分别名为 stagingproductiondevelopment 不需要,因为它被假定为您的本地计算机。

    您可以从 Heroku 仪表板 ->(您的应用程序)-> 设置 -> 信息中获取其他两个环境的 git url

    设置好之后,就这么简单

    production backup
    development restore production
    

    代码非常简单,因此我鼓励您阅读它。但它本质上正是通过获取公共 URL 并恢复它来完成您的 rake 代码尝试做的事情。

    【讨论】:

    • 我要试试这个。学习如何在 heroku 中设置暂存环境对我来说是一个很好的做法,看起来比我预期的要容易。我仍然希望看到这个简单问题的“rake”解决方案。
    • 工作就像一个魅力。尽管该解决方案确实需要我设置一个暂存环境。
    • 因此,如果您遵循代码,它会在几个类和几个文件之间跳转,但它的核心基本上只是将两个命令拼凑在一起进行恢复 - (1) 查找公共 URL 和 ( 2)将其恢复到任何环境。您可以将它们拼凑在一起并将它们放入 rake 任务中,尽管 gem 是一个方便的包,因此不确定这种方法的优势。祝你好运!
    猜你喜欢
    • 2013-06-24
    • 2011-12-03
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2011-05-15
    • 2016-11-13
    相关资源
    最近更新 更多