[英]How to replace your rails local pg db with the database in production on Heroku?
[英]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任務 -
rails console
你當然主要是在尋找前兩個。
安裝后,它希望您有兩個git remote
值設置為staging
和production
。 不需要development
,因為它被認為是您的本地機器。
您可以從Heroku儀表板獲取其他兩個環境的git url - >(您的應用程序) - >設置 - >信息
完成設置后,就像這樣簡單
production backup
development restore production
代碼很簡單,所以我鼓勵你閱讀它。 但它實際上正是通過獲取公共URL並恢復它來完成您的rake代碼嘗試做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.