簡體   English   中英

Heroku Rails Rake任務同步生產和本地DB

[英]Heroku Rails Rake Task to Sync Production & Local DB

我正在嘗試創建一個rake任務,這樣我就可以簡單地輸入“rake db:sync”來更新我的本地數據庫以匹配生產。

此解決方案利用Heroku團隊提供的代碼: 使用PG備份導入和導出Heroku Postgres數據庫

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

查看奇偶校驗寶石 它提供了幾個命令來輕松執行以下Heroku Rails任務 -

  1. 備份數據庫
  2. 恢復數據庫
  3. 運行rails console
  4. 尾部日志
  5. 運行遷移
  6. 部署

你當然主要是在尋找前兩個。

安裝后,它希望您有兩個git remote值設置為stagingproduction 不需要development ,因為它被認為是您的本地機器。

您可以從Heroku儀表板獲取其他兩個環境的git url - >(您的應用程序) - >設置 - >信息

完成設置后,就像這樣簡單

production backup
development restore production

代碼很簡單,所以我鼓勵你閱讀它。 但它實際上正是通過獲取公共URL並恢復它來完成您的rake代碼嘗試做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM