4

次の手順を実行して、cronジョブを取得してrakeタスクを実行することができました。

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

パスが正しいことを確認しました(bashからwhich rubywhich rake

完了時にcronデーモンから次の電子メールを受け取るため、ジョブは実行したいようです。

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)

lib/tasks内のカスタムrakeファイルは次のとおりです。

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

必要なアイテムの有無にかかわらず、それでも同じエラーが発生します...

誰かがこれに光を当てることができますか?または、この関数を実行するスクリプトディレクトリ内にカスタムファイルを作成する方法についてアドバイスしてください(すべてのdelayed_jobsを実行および処理するcronジョブがすでに機能しています。

以下のジョナサンの提案の後、私は走りました

環境

独自の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

これは、rubyファイルが正しくロードされていないことを意味しますか?....また、ジョナサンのアドバイスを受けて、次のcron.shファイルを作成しました

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

まだ行方不明の宝石の通知を受け取っています...乾杯!

4

3 に答える 3

9

これを修正する最も簡単な方法(ただし、ショットガンのアプローチの一種)は、シェルタイプからです。

env | grepパス

次に、この出力を取得して、そのユーザーの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

あなたの宝石がその道の中にあることを確認してください

于 2010-04-06T14:05:05.967 に答える
0

cronを実行すると、最小限の環境で実行されます。envまたはを実行するcronジョブを実行してみてwhich rubyください。そうすると、PATHがインタラクティブシェルパスと同じではないことがわかります。.bash_profileまたは別のシェル起動ファイルでPATHを具体的に設定する必要があります。

于 2010-04-06T14:00:00.727 に答える
0

カスタムスクリプト/ファイルを作成し、それをcronで実行することで、これらすべてを回避しました。方法はわかりませんが、うまくいきました...すべての努力に感謝します。

于 2010-04-11T13:20:36.560 に答える