我一直很高兴使用DelayedJob成语:
foo.send_later(:bar)
Run Code Online (Sandbox Code Playgroud)
这将调用DelayedJob进程中对象foo上的方法栏.
我一直在使用DaemonSpawn在我的服务器上启动DelayedJob进程.
但是......如果foo抛出异常,Hoptoad就无法捕获它.
这是否是任何这些软件包中的错误...或者我是否需要更改某些配置...或者我是否需要在DS或DJ中插入一些将调用Hoptoad通知程序的异常处理?
回应下面的第一条评论.
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
Run Code Online (Sandbox Code Playgroud)
尝试monkeypatching Delayed :: Worker#handle_failed_job:
# lib/delayed_job_airbrake.rb
module Delayed
class Worker
protected
def handle_failed_job_with_airbrake(job, error)
say "Delayed job failed -- logging to Airbrake"
HoptoadNotifier.notify(error)
handle_failed_job_without_airbrake(job, error)
end
alias_method_chain :handle_failed_job, :airbrake
end
end
Run Code Online (Sandbox Code Playgroud)
这对我有用.
(在使用delayed_job 2.1.4和hoptoad_notifier 2.4.11的Rails 3.0.10应用程序中)
只是把它扔在那里 - 你的守护进程应该需要你正在处理的 Rails 环境。它看起来应该类似于:
RAILS_ENV = ARGV.first || ENV['RAILS_ENV'] || 'production'
require File.join('config', 'environment')
Run Code Online (Sandbox Code Playgroud)
这样你就可以指定守护进程被调用的环境。
因为它运行延迟作业,所以守护进程已经这样做了(它需要 activerecord),但也许您只需要最少的 activerecord 即可在没有rails的情况下使delayed_job满意。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |