2

私はRubyonRailsアプリケーションを本番環境で実行していますが、このアプリにはSTOCKモデルがあり、1分ごとに更新する必要があります。

このモデルを更新するために、2つの操作のみが含まれている場合、単純なrakeタスクdb:populate:stocksを作成します。

  1. STOCKモデルを切り捨てます
  2. STOCKモデルにWebサービスからの最新のデータフェッチを入力します

このレーキタスクは1分ごとに実行する必要があります。この目的のために、私はいつでもgemを使用します。ここに私のschedule.rb

env :PATH, ENV['PATH']
set :job_template, nil
set :output, {:standard => '/home/admin/shared/log/cron.log', :error => '/home/admin/shared/log/cron-error.log'}

job_type :rake, "cd :path && rake :task RAILS_ENV=:environment --trace :output"

every 1.minute do
  rake "db:populate:stocks"
end

本番環境では、ruby 1.9.2-p180、rails 3.1.0、およびcapistranoを実行しているrvmを使用しています。ここでは、cronタブを更新するためのcapistranoタスクを使用しています。

after "deploy:update_code" do
 run "cd #{release_path} && whenever --clear-crontab RAILS_ENV=production"
 run "cd #{release_path} && whenever --update-crontab RAILS_ENV=production"
end

そして私のschedule.rbは次のようなcronタスクを作成します:

# Begin Whenever generated tasks for: RAILS_ENV=production
PATH=/home/admin/.rvm//gems/ruby-1.9.2-p180@admin/bin:/home/admin/.rvm//gems/ruby-1.9.2-p180@global/bin:/home/admin/.rvm//rubies/ruby-1.9.2-p180/bin:/home/admin/.rvm//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

* * * * * cd /home/admin/releases/20120904103658 && RAILS_ENV=production rake db:populate:stocks --trace >> /home/admin/shared/log/cron.log 2>> /home/admin/shared/log/cron-error.log

問題は、 cron-error.logからのcronタスクがrakeタスクの実行に失敗したことです。

/home/admin/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/site_ruby/1.9.1/rubygems.rb:314:in `bin_path': can't find gem rake ([">= 0"]) with executable rake (Gem::GemNotFoundException)
from /home/admin/.rvm//gems/ruby-1.9.2-p180@admin/bin/rake:19:in `<main>'

私がここで見逃しているのは、なぜcronジョブが私のenvをロードできなかったのですか?私の schedule.rbに問題はありますか?

4

3 に答える 3

1

RVM のデフォルトが gem のある正しい Ruby バージョンであることを確認してください。次に、 bundle exec rake を使用してみてください...そうすることで、バンドル内のgemが何であれ明示的に呼び出されます(RVMを使用していると仮定します)

于 2012-09-06T16:37:33.907 に答える
0

PATH を変更するだけでは十分ではありません。確認してくださいrvm help cron。crontab で rvm を管理するのに役立つオプションはほとんどありません。

于 2012-09-05T15:43:44.573 に答える