我很难让delayed_job在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 delayed_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 delayed_job
在启动程序/停止程序行中添加rvm -S。 但它仍然失败了错误:找不到rvm命令
我的rvm目录位于我家dir /home/me/.rvm
我尝试在(sudo changes PATH - why?)中找到解决方法,通过添加
来更改PATH环境变量/usr/bin/env PATH=/home/me/.rvm/bin:$PATH
命令“sudo monit start delayed_job”成功了!工人开始了。 但问题是:当我启动sudo /etc/init.d/monit start时,当我查看syslog时,我仍然得到'delayed_job'无法启动
所以我不知道如何调查更多,如何为monit获取更详细的错误。
答案 0 :(得分:1)
我终于成功地解决了这个问题。 我修改了这样的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,因为它似乎有最新版本的问题。所以我现在正在使用守护进程v 1.0.10
我还修改了日志文件/home/me/myapp/log/delayed_job.log的权限,因为它似乎是在我的root用户之前创建的,而我的用户无法访问它(我有问题要测试使用“我”用户命令“script / delayed_job start”
答案 1 :(得分: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'"
希望它有所帮助!