【问题标题】:Combining rake tasks for rails/heroku not working为 rails/heroku 组合 rake 任务不起作用
【发布时间】:2012-09-01 16:50:29
【问题描述】:

我从这个 (http://stackoverflow.com/questions/1890709/combining-many-rake-tasks-into-one-rake-task) 看到您可以像这样组合 rake 任务:

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

顺便说一下,如果你需要它,这里是 rake 的版本:

$ gem list | grep rake                                                               
rake (0.9.2.2)

【问题讨论】:

  • 啊。我自己花了一段时间才得到答案。我现在将发布答案...

标签: ruby-on-rails heroku rake


【解决方案1】:

尝试做

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 调用。

【讨论】:

  • 感谢您的帮助。我自己想通了。 system 有效,但反引号`毕竟是我想要的。 :)
【解决方案2】:

我应该使用反引号 (`) 而不是 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 的新手,我无法立即发布我自己的问题的答案。

在 ruby​​ 中我更喜欢使用反引号而不是 system 的原因是这里讨论的一点优势:Ruby, Difference between exec, system and %x() or Backticks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2018-01-12
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2014-03-20
    • 2017-06-21
    相关资源
    最近更新 更多