2011-05-07 35 views

回答

3

如果您添加到LIB /任務,並在運行herkou將運行這個cron的插件:

namespace :heroku do 
    desc "PostgreSQL database backups from Heroku to Amazon S3" 
    task :backup => :environment do 
    begin 
     require 'right_aws' 
     puts "[#{Time.now}] heroku:backup started" 
     name = "#{ENV['APP_NAME']}-#{Time.now.strftime('%Y-%m-%d-%H%M%S')}.dump" 
     db = ENV['DATABASE_URL'].match(/postgres:\/\/([^:]+):([^@]+)@([^\/]+)\/(.+)/) 
     system "PGPASSWORD=#{db[2]} pg_dump -Fc -i --username=#{db[1]} --host=#{db[3]} #{db[4]} > tmp/#{name}" 
     s3 = RightAws::S3.new(ENV['s3_access_key_id'], ENV['s3_secret_access_key']) 
     bucket = s3.bucket("#{ENV['APP_NAME']}-heroku-backups", true, 'private') 
     bucket.put(name, open("tmp/#{name}")) 
     system "rm tmp/#{name}" 
     puts "[#{Time.now}] heroku:backup complete" 
    # rescue Exception => e 
    # require 'toadhopper' 
    # Toadhopper(ENV['hoptoad_key']).post!(e) 
    end 
    end 
end 

task :cron => :environment do 
    Rake::Task['heroku:backup'].invoke 
+0

有一個包裹這個功能的寶石,'heroku_s3_backup'。非常好地工作。 – 2011-05-07 17:11:52

+0

Douglas:「有誰知道如何設置cron作業來自動創建備份(每天都很好)並將其直接發送到我的S3帳戶?」因此,我發佈了一份cron工作。 – eggie5 2011-05-07 17:51:43

+0

寶石是完全相同的代碼,包裹起來,所以你的cron工作可以很好,整潔。請參閱:https://github.com/edavis10/heroku_s3_backup。 – 2011-05-07 18:35:46

4

我修補的寶石修復的B七所提到的系統調用。抓取數據庫參數的正則表達式正在破壞,因爲非共享數據庫的新DATABASE_URL現在包含一個端口號。

https://github.com/mokolabs/heroku_s3_backup

如果你雪松堆棧,那麼這個補丁應該爲你工作。但是我使用的是Bamboo,由於與pg_dump的版本衝突,它不適用於我。 Postgres是Bamboo上的8.x版本,所以pg_dump不能從新的非共享數據庫轉儲數據,因爲它們都在Postgres 9.1版上運行。

如果我能找到Bamboo堆棧的解決方法,我會在這裏更新gem和我的評論。

+0

非常好,你應該向主回購商提交一個拉請求。 – 2012-09-01 17:40:37

相關問題