2012-09-01 72 views
0

我從這看過(http://stackoverflow.com/questions/1890709/combining-many-rake-tasks-into-one-rake-task),你可以結合耙任務是這樣的:結合rake任務rails/heroku不工作

desc 'This rebuilds development db' 
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"] 

然而,當我嘗試這樣做,我的本地應用相對簡單的Rake任務結合起來,每次只運行shell命令,它似乎只執行無論是陣列['heroku:push', 'heroku:migrate', 'heroku:restart']第一。

下面的代碼:

desc 'Push to heroku production, db:migrate, and restart app' 
task :deploy_production => ['heroku:push', 'heroku:migrate', 'heroku:restart'] 

namespace :heroku do 
    task :push do 
    puts 'Deploying app to Heroku...' 
    exec 'git push heroku master' 
    end 

    task :migrate do 
    puts 'Running database migrations ...' 
    exec 'heroku run rake db:migrate' 
    end 

    task :restart do 
    puts 'Restarting app servers ...' 
    exec 'heroku restart' 
    end 
end 

順便說一句,如果你需要它,這裏的耙的版本:

$ gem list | grep rake                
rake (0.9.2.2) 
+0

啊。我花了一段時間纔得到答案。我現在會發布答案... – padi

回答

0

我應該使用反引號(`)代替exec ruby​​命令。下面的代碼應該喜歡什麼爲rake deploy_production工作:

desc 'Push to heroku production, db:migrate, and restart app' 
task :deploy_production => ['heroku:push', 'heroku:migrate', 'heroku:restart'] 

namespace :heroku do 
    task :push do 
    puts 'Deploying app to Heroku...' 
    `git push heroku master` 
    end 

    task :migrate do 
    puts 'Running database migrations ...' 
    `heroku run rake db:migrate` 
    end 

    task :restart do 
    puts 'Restarting app servers ...' 
    `heroku restart` 
    end 
end 

我不得不立即張貼問題,因爲我是新來的StackOverflow,我不能立即發佈一個答案,我自己的問題。

我喜歡紅寶石在反引號的system原因是因爲這裏討論的微弱優勢:Ruby, Difference between exec, system and %x() or Backticks

0

嘗試做

desc 'Push to heroku production, db:migrate, and restart app' 
task :deploy_production => ['heroku:push', 'heroku:migrate', 'heroku:restart'] 

namespace :heroku do 
    task :push do 
    puts 'Deploying app to Heroku...' 
    system 'git push heroku master' 
    end 

    task :migrate do 
    puts 'Running database migrations ...' 
    system 'heroku run rake db:migrate' 
    end 

    task :restart do 
    puts 'Restarting app servers ...' 
    system 'heroku restart' 
    end 
end 

所以基本上只需將exec呼叫替換爲system呼叫即可。

+0

感謝您的幫助。我自己想清楚了。 '系統'起作用,但反作用力'畢竟是我想要的。 :) – padi