7

我正在尝试在 Rails 3.0.9(使用 RVM)中使用 crontab 运行 Rake 任务,但它不起作用。

但是当我在控制台中运行时它工作正常

我的耙子任务

namespace :alert  do
  desc "create some reminder notification"
  task :send_reminder => :environment do
     p "my task goes here ----"
  end
end

我的 cron 任务

*/1 * * * * cd /home/anu-karthik/Documents/billguru/ && /home/anu-karthik/.rvm/gems/ruby-1.9.2-p0/bin/rake  alert:send_reminder >/home/anu-karthik/alert.out

但我没有在“alert.out”文件中找到任何日志条目

我也尝试过以下方法

*/1 * * * * cd /home/anu-karthik/Documents/billguru/ && rake  alert:send_reminder >/home/anu-karthik/alert.out

现在输出是(在/home/anu-karthik/Documents/billguru)

我认为这是 RVM 的问题。我该如何解决这个问题?提前致谢

4

5 回答 5

13

根据 RVM 文档:https ://rvm.io/integration/cron

对于每个 rvm 或 gemset,都有一个描述它的环境文件。您可以通过以下方式获得它:

rvm env --path -- ruby-version[@gemset-name]

那就是rvm环境文件的路径。

从 cron 运行 rake 任务时,从 shell 脚本调用它们是一个好习惯。

crontab 应该是这样的:

*/30 * * * * /path/to/shell/script.sh >/dev/null 2>&1

然后在 shell 脚本中:

#!/bin/bash
cd /path/to/project
source /path/to/env/file
rake task

希望这可以帮助!

于 2012-04-12T10:15:12.167 回答
4

尝试使用无论何时gem 来管理编写和部署您的 cron 作业。

默认情况下,所有作业都使用 bash -l -c 'command...' 运行。除其他外,这允许您的 cron 作业通过加载整个环境而不是 cron 有限的环境来与 RVM 配合使用。阅读更多:http: //blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production

从描述来看,它应该对你有所帮助。

于 2012-04-07T08:09:13.283 回答
2

我刚刚为一个项目解决了这个问题:

来自https://rvm.io/integration/cron/

"For every installed ruby and created gemset RVM creates wrappers for basic command line tools like gem, rake, ruby. You can find them in `$rvm_path/bin`." 

因此,在上面列出的情况下,您可以执行以下操作:

*/1 * * * * (cd /home/anu-karthik/Documents/billguru/; /usr/local/rvm/bin/rake-ruby-1.9.2-p290@billguru alert:send_reminder)

其中 billguru 将是 gemset,而 ruby​​-1.9.2-p290 将是您正在使用的 ruby​​ 版本。这假设您在 /usr/local/rvm 中安装了系统范围的 rvm。这会在 gemset 的上下文中运行 rake 任务,并为该 gemset 提供适当的 rake。

上面提到的 rvm.io 页面列出了执行相同操作的其他几种方法,但这种方法对我来说效果很好。

于 2013-04-10T00:12:27.223 回答
0

你可以只加载(使用)你的 RVM 环境,它会像这样设置 rake 的路径:

0 * * * * /home/user/.rvm/bin/rvm use ree-1.8.7-2011.03 rake name:task

ree-1.8.7-2011.03我要加载的 gemset 的名称在哪里,输入rvm list以查看您的 gemset。

于 2012-05-14T18:39:24.653 回答
0

此脚本将允许您从任何用户/环境运行 Rake 任务。它将检测 RVM ruby​​ 环境和正确的 Rails 用户。

#!/bin/bash

RAILS_USER=$(stat -c '%U' /YOUR_PATH_HERE/environment.rb) 

echo "Detected rails user: $RAILS_USER"

sudo -H -u $RAILS_USER bash -c 'RAILS_USER=$USER; echo "I am $USER, with uid $UID" ; echo "whoamI: $(whoami)" ; echo "Running rvm script: /home/$RAILS_USER/.rvm/scripts/rvm" ; source /home/$RAILS_USER/.rvm/scripts/rvm ; ENV_FILE=`rvm env --path` ; echo $ENV_FILE ; source $ENV_FILE ; cd /YOUR_PATH_HERE/lib/tasks ; rake XXX:YYY RAILS_ENV=production'
于 2018-03-10T21:18:13.823 回答