0

これ(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タスクを組み合わせようとすると、配列の最初のタスクのみが実行されるようです ['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)
4

2 に答える 2

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です。

于 2012-09-01T17:20:54.827 に答える
0

execrubyコマンドの代わりにバッククォート( `)を使用する必要があります。が機能するためのコードは次の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、exec、systemと%x()の違い、またはバックティック

于 2012-09-02T04:31:01.737 に答える