【问题标题】:rake task via cron problem loading rubygems通过 cron 加载 ruby​​gems 的 rake 任务问题
【发布时间】:2011-02-04 19:52:32
【问题描述】:

通过执行以下操作,我设法获得了一个 cron 作业来运行 rake 任务:

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

我已与 which rubywhich rake 核对以确保路径正确(来自 bash)

当我从 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

无论有没有需要的项目,它仍然给我同样的错误......

任何人都可以对此有所了解吗?或者建议我如何在脚本目录中创建一个自定义文件来运行这个函数(我已经有一个 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

仍然收到丢失宝石的通知... 干杯!

【问题讨论】:

    标签: ruby-on-rails cron rake scheduled-tasks delayed-job


    【解决方案1】:

    解决此问题的最简单方法(但有点像霰弹枪的方法)是使用您的外壳类型

    环境 | 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
    

    只要确保你的宝石在该路径内

    【讨论】:

    • 在更新文件时遇到了很多困难,因为它在不应该出现的地方插入了文本......不幸的是,无法完成这个选项......感谢您的尝试:)
    • 我仍然认为这是一个路径问题,仅使用 /usr/bin 和 /bin 是一个相当小而窄的路径。从你的 shell 输入 echo $PATH 这就是你应该创建的路径。
    • 是的,我把它放在我想运行以执行 rake 任务的 cron.sh 文件中......但不幸的是,它不想加载应用程序的已安装 gem......我一定是失踪了太简单了……
    • 把路径放在你的 cron 文件的顶部 crontab -e 添加你的路径,然后是你的工作,让我知道它是如何工作的。
    • 正如我所说,我不能这样做,因为终端中的编辑发疯了,没有做我想做的事......我猜这会奏效......所以我会标记它作为解决方案..但由于编辑困难而无法完成(我想我需要在重做之前复习一下)
    【解决方案2】:

    当 cron 运行时,它在非常小的环境中执行。尝试运行只执行 envwhich ruby 的 cron 作业,您可能会发现您的 PATH 与交互式 shell 路径不同。您需要在 .bash_profile 或其他 shell 启动文件中专门设置 PATH。

    【讨论】:

    • 用 ENV 输出更新了我的帖子......如果我制作一个 .sh 脚本会更好......也将编码添加到上面......
    【解决方案3】:

    我通过制作自定义脚本/文件并通过 cron 运行它来解决所有这些问题。我不知道如何,但它设法工作...... 感谢所有的努力。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 2013-03-04
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2010-12-25
      相关资源
      最近更新 更多