2016-07-11 74 views
0

我試圖將我的所有生產數據庫(我在Mongo中都有)複製到我的臨時環境中。所以我試圖建立一個任務。首先,我需要連接到生產環境,以便能夠訪問我生產的所有模型(Model.allEach ...)但我不知道如何重現生產環境。我知道在控制檯中我可以做'export RAILS_ENV = heroku_production',但是我不知道如何在Rake Task中做到這一點。這就是我想現在,但它不工作,因爲我打印Rails.env和它打印「發展」 ......所以我有點失落在Rails的Rake任務中重現生產環境

namespace :db do 
    namespace :sync_production_staging do 
    desc "Copy production database to staging" 
    task :staging => :environment do 

     system "export RAILS_ENV=heroku_production" 

     ap Rails.env 

     ap User.all 
    end 
    end 
end 
+0

你正試圖從Heroku的你的數據庫複製到本地? – MZaragoza

回答

0

我有一個腳本,複製了我從Heroku的數據庫,以我的地方它是一個真正的兩岸向前的過程,我很遺憾,這是PG,而不是蒙戈,但我相信,這應該有助於

#lib/tasks/db.rake 
namespace :db do 
    desc "Import most recent database dump" 
    task :import_from_prod => :environment do 
    puts 'heroku run pg:backups capture --app sushi-prod' 
    restore_backup 'sushi-prod' 
    end 

    def path_to_heroku 
    ['/usr/local/heroku/bin/heroku', '/usr/local/bin/heroku'].detect {|path| File.exists?(path)} 
    end 

    def heroku(command, site) 
    `GEM_HOME='' BUNDLE_GEMFILE='' GEM_PATH='' RUBYOPT='' #{path_to_heroku} #{command} -a #{site}` 
    end 

    def restore_backup(site = 'sushi-prod') 
    dump_file = "#{Rails.root}/tmp/postgres.dump" 
    unless File.exists?(dump_file) 
     pgbackups_url = heroku('pg:backups public-url -q', site).chomp 
     puts "curl -o #{dump_file} #{pgbackups_url}" 
     system "curl -o #{dump_file} '#{pgbackups_url}'" 
    end 
    database_config = YAML.load(File.open("#{Rails.root}/config/database.yml")).with_indifferent_access 
    dev_db = database_config[Rails.env] 
    system "pg_restore -d #{dev_db[:database]} -C#{dump_file}".gsub(/\s+/,' ') 
    puts 
    puts "'rm #{dump_file}' to redownload postgres dump." 
    puts "Done!" 
    end 
end 
相關問題