2010-04-06 125 views
4

我已經得到了一個cron作業做運行rake任務如下:rake任務

cd /home/myusername/approotlocation/ && /usr/bin/rake sendnewsletter RAILS_ENV=development 

我有which rubywhich rake檢查,以確保路徑是正確的(從bash)的

的工作看起來要當它完成

Missing these required gems: 
     chronic 
     whenever 
     searchlogic 
     adzap-ar_mailer 
     twitter 
     gdata 
     bitly 
     ruby-recaptcha 

You're running: 
    ruby 1.8.7.22 at /usr/bin/ruby 
    rubygems 1.3.5 at /home/myusername/gems, /usr/lib/ruby/gems/1.8 

Run `rake gems:install` to install the missing gems. 
(in /home/myusername/approotlocation) 

我卡斯特運行,因爲我從cron守護程序得到以下電子郵件LIB /任務中OM耙文件如下:

task :sendnewsletter => :environment do 
require 'rubygems' 
require 'chronic' 
require 'whenever' 
require 'searchlogic' 
require 'adzap-ar_mailer' 
require 'twitter' 
require 'gdata' 
require 'bitly' 
require 'ruby-recaptcha' 
    @recipients = Subscription.all(:conditions => {:active => true}) 
    for user in @recipients 
     Email.send_later(:deliver_send_newsletter,user) 
    end 
end 

有或沒​​有要求的項目,但它仍然給了我同樣的錯誤......

任何人都可以闡明這一些輕?或可替換地告訴我關於如何使將要運行該功能的腳本目錄中的自定義文件(我已經有一個cron作業工作,將運行並處理我所有的delayed_jobs。

Jonathans建議下面我跑

ENV

爲自身cron作業並取得了以下的輸出:

SHELL=/bin/sh 
MAILTO=myemailaddress 
USER=myusername 
PATH=/usr/bin:/bin 
PWD=/home/myusername 
SHLVL=1 
HOME=/home/myusername 
LOGNAME= myusername 
_=/usr/bin/env 

做這意味着它沒有正確加載紅寶石文件? .... 也參加了Jonathans意見和產生以下cron.sh文件

#!/bin/sh 
date 
echo "Executing Matenia Rake Task" 
PATH=/usr/bin:/bin 
cd /home/myusername/approotlocation/ 
rake sendnewsletter 

仍然得到失蹤寶石注意到... 乾杯!

回答

9

最簡單的辦法解決這一問題(但那種獵槍approche)是在你的shell類型

ENV | grep的PATH

然後藉此輸出,並將其添加你的crontab該用戶

所以它會是這個樣子

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 

# m h dom mon dow user command 
42 6 * * *  root job1 
47 6 * * 7  root job2 
52 6 1 * *  root job3 

只要確保你的寶石的是路徑的內部

+0

更新文件時有很多困難,它插入的文本不應該是......不能很好地完成這個選項......感謝嘗試:) – 2010-04-07 05:47:38

+0

我仍然認爲這是一個路徑問題,只需使用/ usr/bin和/ bin是一條相當狹小的路徑。從你的shell類型echo $ PATH,這是你應該做的路徑。 – kSiR 2010-04-07 13:27:34

+0

你好,我把它放在cron.sh文件中,我想運行它來做耙子任務..但不幸的是,它不想加載應用程序安裝的寶石...我一定錯過了一些簡單的東西... – 2010-04-08 11:08:25

0

當cron運行時,它會以非常小的環境執行。嘗試運行一個只執行envwhich ruby的cron作業,並且您可能會看到PATH與交互式shell路徑不同。您需要專門設置.bash_profile或其他shell啓動文件中的路徑。

+0

用ENV輸出更新了我的帖子......也許這會更好,如果我做了一個.sh腳本....添加了編碼以上以及... – 2010-04-07 05:44:22

0

通過製作自定義腳本/文件並通過cron運行,我解決了所有這些問題。我不知道如何,但它設法工作... 感謝所有的努力。