2015-12-28 32 views
0

在Rails部署中,有些时候我们错过了执行rake db:migrate,rake db:seed或任何在定期部署项目之后的rake作业。我试图添加这样的脚本与Rails结构,这将在部署后自动调用RakeJob和所有此类脚本。ROR +部署后自动运行Rake Job

就像在这种顺序方式: -

耙分贝:迁移

耙分贝:种子

耙(以下Rake是所有耙作业的组合)

+0

为什么不使用Capistrano的部署?这非常有帮助,您可以根据需要添加任何要在部署后执行的任务 –

回答

0

我常部署到Heroku。我不知道你在哪里部署到但这里是我的部署脚本的副本

#vim lib/tasks/deploy.rake 

namespace :deploy do 
    #rake deploy:production  # Deploy to production 
    desc "Deploy to production" 
    task :production do 
    puts "THIS IS DEPLOYING TO PRODUCTION!!!" 
    puts "********* CAREFUL! *********" 
    sleep 10 
    backup_environment_db("heroku-prod") 
    deploy_sha_to_environment(ARGV[1], "heroku-prod") 
    system("open http://www.example.com/") 
    end 

    def deploy_sha_to_environment(sha, environment) 
    if sha = ARGV[1] 
     puts "About to push #{sha} to #{environment}." 
     message = `git log --format=%B -n 1 #{sha}` 
     puts "#{sha} -- #{message}" 
     sleep 2 
     Bundler.with_clean_env do 
     system "git push --force [email protected]:#{environment}.git #{sha}:master" 
     system "heroku run rake db:migrate --app #{environment}" 
     system "heroku restart --app #{environment}" 
     end 
    else 
     puts 
     puts "*** sha required! (pass it as an argument) ***" 
     puts 
     Rake.application.invoke_task("codeship:statuses") 
     exit 
    end 
    end 
end 

我希望这有助于