2012-09-05 23 views
2

我在生產中運行rails應用程序的ruby,這個應用程序有STOCK模型,它應該每1分鐘更新一次。當在生產環境中執行創建的cron時所需的gem缺失

爲了更新這個模型我創建簡單的rake任務DB:填充:股票,當它僅包含兩種操作:

  1. 截斷股票模型
  2. 補庫存模型最新數據從web服務獲取我使用每當寶石

這個rake任務應執行每1分鐘,爲了這個目的。在這裏我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 

在生產中我使用RVM運行紅寶石1.9.2-P180,軌3.1.0和Capistrano的,在這裏我Capistrano的任務更新的cron標籤:

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/[email protected]/bin:/home/admin/.rvm//gems/[email protected]/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 

問題是定期任務執行失敗rake任務,從的cron-error.log中

/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/[email protected]/bin/rake:19:in `<main>' 

什麼,我缺少在這裏,爲什麼cron作業加載失敗我ENV?我的schedule.rb有問題嗎?

回答

0

修改PATH是不夠的,檢查rvm help cron - 有幾個選項可以幫助管理crontab中的rvm。

1

確保您的RVM默認使用正確的寶石版本。 然後嘗試這樣做會顯式調用任何寶石的束(假設你使用RVM)

1

我有類似的問題,我與修復使用捆綁的exec耙...

rvm cron setup 
服務器中的

。這將rvm env變量(PATH,GEM_HOME,GEM_PATH ...)添加到我的cronjob中。

我已經刪除了set命令

env :PATH, ENV['PATH'] 
相關問題