Rails delayed_job 不执行
Rails delayed_job doesn't perform
我定义了两个自定义作业。一个有效,另一个无效。一个不工作的排队,但没有其他事情发生。没有失败或成功。
在我找到文档的 collectiveidea 和 SO 上尝试了所有提示后,我被难住了。我有工作失败被保留。我将所有 DJ 事件记录在单独的日志中。他们没有提供任何线索。我的 DJ 日志显示正在排队的工作,仅此而已。
工作是 post 到一个网站。
这就是出现在 delayed_job table 中的糟糕工作。
2.1.2 :004 > Delayed::Job.last
=> #<Delayed::Backend::ActiveRecord::Job id: 2515456, priority: 0, attempts: 0, handler: "--- !ruby/struct:SendHubCommandJob\ncmd: getOptions...", last_error: nil, run_at: "2015-08-14 02:07:32", locked_at: nil, failed_at: nil, locked_by: nil, queue: nil, created_at: "2015-08-14 02:07:32", updated_at: "2015-08-14 02:07:32">
我的自定义作业:
SendHubCommandJob = Struct.new(:cmd, :hub, :badge, :arg1, :arg2) do
# Send a command to the hub to forward to badge
def enqueue(job)
#called
Delayed::Worker.logger.info "SendHubCommandJob enqueue: #{cmd} #{hub} #{badge} #{arg1} #{arg2}"
end
def success(job)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: success"
end
def error(job, exception)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: error"
# Send email notification / alert / alarm
end
def failure(job)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: failure"
end
def perform
#not called
Delayed::Worker.logger.info "SendHubCommandJob: got here"
Delayed::Worker.logger.info "SendHubCommandJob perform: #{:cmd} #{hub} #{badge} #{arg1} #{arg2}"
require "open-uri"
require "net/http"
@@cmd_count = @@cmd_count + 1
s = "http://#{hub}.local:9090/cmd"
uri = URI(s)
req = Net::HTTP::Post.new(uri)
Delayed::Worker.logger.info "SendHubCommandJob: #{uri}"
# Set where hub should send asynch response
response_addr = "mark.local:3000"
#TODO Implement other commands here
case @cmd
when 'getOptions'
req.set_form_data('type' => 'cmd', 'cmd'=>'READ', 'subcmd'=>'GENERAL', 'datatype'=>'OPTIONS', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}'})
when 'setOptions' #arg1 is 12 byte hex string per badge spec
req.set_form_data('type' => 'cmd', 'cmd'=>'WRITE', 'subcmd'=>'GENERAL', 'datatype'=>'OPTIONS', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}', 'value'=>'#{@arg1}'})
when 'getBadgeInfo' #arg1 is string DEVICE_NAME, MODEL_NUMBER, SERIAL_NUMBER, FIRMWARE_REV, MANUFACTURER_NAME
req.set_form_data('type' => 'cmd', 'cmd'=>'READ', 'subcmd'=>'#{@arg1}', 'datatype'=>'ID', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}'})
else
Delayed::Worker.logger.error "SendHubCommandJob: Unexpected command"
end
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
#Delayed::Worker.logger.info response.inspect
end
case res
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
else
# TODO figure how handle error
res.value
end
Delayed::Worker.logger.debug "SendHubCommandJob: #{@res.to_s}"
end #perform
end
我意识到我没有正确启动 delayed job worker。该命令需要尾随 "start":
RAILS_ENV=发展bin/delayed_job开始
我定义了两个自定义作业。一个有效,另一个无效。一个不工作的排队,但没有其他事情发生。没有失败或成功。
在我找到文档的 collectiveidea 和 SO 上尝试了所有提示后,我被难住了。我有工作失败被保留。我将所有 DJ 事件记录在单独的日志中。他们没有提供任何线索。我的 DJ 日志显示正在排队的工作,仅此而已。
工作是 post 到一个网站。
这就是出现在 delayed_job table 中的糟糕工作。
2.1.2 :004 > Delayed::Job.last
=> #<Delayed::Backend::ActiveRecord::Job id: 2515456, priority: 0, attempts: 0, handler: "--- !ruby/struct:SendHubCommandJob\ncmd: getOptions...", last_error: nil, run_at: "2015-08-14 02:07:32", locked_at: nil, failed_at: nil, locked_by: nil, queue: nil, created_at: "2015-08-14 02:07:32", updated_at: "2015-08-14 02:07:32">
我的自定义作业:
SendHubCommandJob = Struct.new(:cmd, :hub, :badge, :arg1, :arg2) do
# Send a command to the hub to forward to badge
def enqueue(job)
#called
Delayed::Worker.logger.info "SendHubCommandJob enqueue: #{cmd} #{hub} #{badge} #{arg1} #{arg2}"
end
def success(job)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: success"
end
def error(job, exception)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: error"
# Send email notification / alert / alarm
end
def failure(job)
#not called
Delayed::Worker.logger.info "SendHubCommandJob: failure"
end
def perform
#not called
Delayed::Worker.logger.info "SendHubCommandJob: got here"
Delayed::Worker.logger.info "SendHubCommandJob perform: #{:cmd} #{hub} #{badge} #{arg1} #{arg2}"
require "open-uri"
require "net/http"
@@cmd_count = @@cmd_count + 1
s = "http://#{hub}.local:9090/cmd"
uri = URI(s)
req = Net::HTTP::Post.new(uri)
Delayed::Worker.logger.info "SendHubCommandJob: #{uri}"
# Set where hub should send asynch response
response_addr = "mark.local:3000"
#TODO Implement other commands here
case @cmd
when 'getOptions'
req.set_form_data('type' => 'cmd', 'cmd'=>'READ', 'subcmd'=>'GENERAL', 'datatype'=>'OPTIONS', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}'})
when 'setOptions' #arg1 is 12 byte hex string per badge spec
req.set_form_data('type' => 'cmd', 'cmd'=>'WRITE', 'subcmd'=>'GENERAL', 'datatype'=>'OPTIONS', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}', 'value'=>'#{@arg1}'})
when 'getBadgeInfo' #arg1 is string DEVICE_NAME, MODEL_NUMBER, SERIAL_NUMBER, FIRMWARE_REV, MANUFACTURER_NAME
req.set_form_data('type' => 'cmd', 'cmd'=>'READ', 'subcmd'=>'#{@arg1}', 'datatype'=>'ID', 'modulename'=>'BTPENDANT',
'sensorid'=>'#{@badge}', 'moduleidx'=>'0', 'processtype'=>'1', 'count_or_ms'=>'0', 'trackingid'=>@@cmd_count, 'response_addr'=>response_addr,
'jsontxt'=>{'device'=>'#{@hub}'})
else
Delayed::Worker.logger.error "SendHubCommandJob: Unexpected command"
end
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
#Delayed::Worker.logger.info response.inspect
end
case res
when Net::HTTPSuccess, Net::HTTPRedirection
# OK
else
# TODO figure how handle error
res.value
end
Delayed::Worker.logger.debug "SendHubCommandJob: #{@res.to_s}"
end #perform
end
我意识到我没有正确启动 delayed job worker。该命令需要尾随 "start":
RAILS_ENV=发展bin/delayed_job开始