【问题标题】:Why does my delayed_job fail without RVM?为什么没有 RVM 我的延迟作业会失败?
【发布时间】:2012-07-02 00:24:30
【问题描述】:

我安装了delayed_job,并启动了守护程序以使用此 Ruby 脚本运行作业:

require 'rubygems'
require 'daemon_spawn'
$: << '.'

RAILS_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))

class DelayedJobWorker < DaemonSpawn::Base
  def start(args)
    ENV['RAILS_ENV'] ||= args.first || 'development'
    Dir.chdir RAILS_ROOT
    require File.join('config', 'environment')

    Delayed::Worker.new.start
  end

  def stop
    system("kill `cat #{RAILS_ROOT}/tmp/pids/delayed_job.pid`")
  end
end

DelayedJobWorker.spawn!(:log_file => File.join(RAILS_ROOT, "log", "delayed_job.log"),
                    :pid_file => File.join(RAILS_ROOT, 'tmp', 'pids', 'delayed_job.pid'),
                    :sync_log => true,
                    :working_dir => RAILS_ROOT)

如果我使用rvmsudo 运行命令,它会完美运行。

如果我只是在没有 RVM 的情况下使用 Ruby 命令,它会失败,这就是输出。我不知道为什么会这样。你能给我一些线索吗?

user@mysystem:~/redeal.it/application$ ruby script/delayed_job start production
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:16:in `kill': Operation not permitted (Errno::EPERM)
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:16:in `alive?'
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:125:in `alive?'
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `block in start'
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `select'
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:176:in `start'
from /usr/local/rvm/gems/ruby-1.9.3-p194/gems/daemon-spawn-0.4.2/lib/daemon_spawn.rb:165:in `spawn!'
from script/delayed_job:37:in `<main>'

【问题讨论】:

    标签: ruby-on-rails ruby rvm delayed-job


    【解决方案1】:

    首先,查看 shared/pids/delayed_job.pid 并查看进程是否正在运行。就我而言,它看起来像是被关闭而不干净,并且 pid 文件留在原处。部署脚本试图杀死不存在的进程并给出该权限错误。

    我已经删除了delayed_job.pid,部署成功了。

    【讨论】:

      【解决方案2】:

      您有权限问题。

      简单地说:您有一个在另一个用户下运行的延迟作业(可能是root,由于使用了rvmsudo),而守护进程spawn 正试图杀死它。你会得到一个Operation not permitted

      尝试先用 rvmsudo 杀死 delay_job,确保它没有运行(尝试ps aux),然后尝试在没有rvmsudo 的情况下启动。

      它应该可以工作。

      【讨论】:

        猜你喜欢
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 2015-02-18
        • 1970-01-01
        • 2016-03-18
        • 2018-08-16
        • 1970-01-01
        • 2012-08-02
        相关资源
        最近更新 更多