0

运行 script/delayed_job start 命令时出现以下错误。我正在使用 Jruby,所以我尝试了以下命令:

jruby script/delayed_job start

但我收到以下错误:

fork() function is unimplemented on this machine (NotImplementedError)

我已经用谷歌搜索了,根据我的观察叉没有为 jruby 实现。所以我正在考虑使用 rake 任务运行延迟作业脚本。

谁能帮我编写需要运行延迟作业脚本的 rake 任务。

4

2 回答 2

4

下面是运行延迟作业的 rake 任务的代码

路径将是 \script\delayed_job.rb

#!/usr/bin/env ruby
# -*- 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'
    require File.join(RAILS_ROOT, '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)
于 2013-07-16T12:15:36.687 回答
0

我使用 jruby 1.7.3 、 rails 2.3.17 和 delayed_job 1.8.4 用于我的旧版 rails 应用程序。

命令“jruby script/delayed_job start”不适用于我的应用程序。听说jruby 1.7.3 不支持delayed_job。因此,代替“jruby script/delayed_job start”命令,作为一种解决方法,我决定使用 rake 任务“jobs:work”任务。

我在冻结的delayed_job (1.8.4) gem 的lib/delayed_job.rb 文件中添加了以下行。需要 File.dirname( FILE ) + '/delayed/performable_method'

这解决了在我的 qa 和生产环境中运行“rake jobs:work”任务时出现的“performable_method”相关错误。

现在,我延迟的工作在所有环境中都运行良好。希望这会有所帮助。

于 2014-06-04T14:00:40.267 回答