2

我正在努力让延迟工作在 rails 3.0.9(ruby 1.9.2)下工作。我成功运行的唯一方法是手动录制命令 rake jobs:work。但我希望它在 rails 应用程序启动时自动启动。

我已经在 ubuntu 下安装了 monit,并将其配置为启动位于我的应用程序中的文件。这失败看起来像:

check process delayed_job with pidfile /home/me/myapp/tmp/pids/delayed_job.pid
start program = "/home/me/myapp/script/delayed_job start"
stop program = "/home/me/myapp/script/delayed_job stop" 

我在delayed_job脚本文件中添加了环境设置:

#!/usr/bin/env ruby

    ENV['RAILS_ENV'] = "development"
    require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
    require 'delayed/command'
    Delayed::Command.new(ARGV).daemonize

当我运行命令“sudo monit start delay_job”时,出现以下错误:

/usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- bundler/setup (LoadError)

所以我猜这是因为 sudo 使用了错误版本的 ruby​​ 环境,我尝试了以下解决方案: rvm monit delay_job

通过在启动程序/停止程序行中添加 rvm -S。但它仍然失败并出现错误:找不到 rvm 命令

我的 rvm 目录位于我的主目录 /home/me/.rvm

我试图在(sudo 更改 PATH - 为什么?)中找到解决方法,通过添加来更改 PATH 环境变量

/usr/bin/env PATH=/home/me/.rvm/bin:$PATH

命令“sudo monit start delay_job”成功了!工人开始了。但问题是:当我启动 sudo /etc/init.d/monit start 并且当我查看系统日志时,我仍然得到'delayed_job' failed to start

所以我不知道如何进行更多调查,如何为monit获取更详细的错误。

4

2 回答 2

2

我终于成功解决了这个问题。我像这样修改了monit文件:

check process delayed_job with pidfile /home/me/myapp/tmp/pids/delayed_job.pid
start program = "/bin/su - me -c 'cd /home/me/myapp/; script/delayed_job start'"
stop program = "/bin/su - me -c 'cd /home/me/myapp/; script/delayed_job stop'"

我还降级了守护进程 gem,因为最新版本似乎存在问题。所以我现在使用的是daemons v 1.0.10

我还修改了日志文件/home/me/myapp/log/delayed_job.log的权限,因为它似乎是在我的root之前创建的,我的用户无权访问它(我在测试命令“脚本”时遇到问题/delayed_job start” 与“我”用户)

于 2011-08-27T12:34:09.753 回答
1

这是唯一对我有用且正确读取 ENV 的行

start program = "/usr/local/rvm/bin/rvm-shell -c 'cd /var/www/[APP]/current/; RAILS_ENV=production bundle exec bin/delayed_job start'"

希望能帮助到你!

于 2014-09-27T19:03:22.230 回答