ruby-on-rails - 调试 Delayed_Jobs

标签 ruby-on-rails debugging logging delayed-job

我正在寻找调试延迟作业类。首先,我添加了 config/initializers/delayed_job_config 以将我的日志记录移动到我的 log/production.rb 文件中。

Delayed::Job.destroy_failed_jobs = false
Delayed::Worker.logger = Rails.logger

然后在实际文件中我在实际文件中
class TestJob < Struct.new()
 logger.debug("test logging")
end

日志中没有显示任何内容。谁有想法?

最佳答案

我很幸运将错误的回溯记录到电子邮件中,这至少为我提供了延迟作业何时/如何失败的一些背景信息:

下面是一个例子:

result = Delayed::Job.work_off
  unless result[1].zero?
    ExceptionMailer.deliver_exception_message("[Delayed Job Failed] Error id: #{Delayed::Job.last.id}", Delayed::Job.last.last_error)
  end

如果您只想为 Delayed::Job 任务编写测试,这里是我采用的方法。我将根据各种场景的期望将执行任务剔除,然后测试 Delayed::Job 如何处理这些结果。这是我如何使用 Delayed::Job 每晚与远程 CMS 同步的示例。
it "should sync content from the remote CMS" do
CMSJobs::Sync.module_eval do
  def perform
    url.should == "http://someurl.com/tools/datafeed/resorts/all"
    Resort.sync_resorts!([{'id' => 1, 'name' => 'resort foo'}, { 'id' => 2, 'name' => 'resort bar' }])
  end
end

lambda do
  Resort.sync_all!
end.should change(Delayed::Job, :count)

lambda do
  Delayed::Job.work_off
end.should change(Resort, :count).by(2)

# It should now delete a resort if it doesn't appear in the next CMS feed.
lambda do
  Resort.sync_resorts!([{ 'id' => 2, 'name' => 'resort bar' }])
end.should change(Resort, :count).by(-1)

结尾

关于ruby-on-rails - 调试 Delayed_Jobs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035582/

相关文章:

mysql - Mac OS X Lion 上的 MAMP 2.0.1 与 Ruby on Rails 3.2.0

java - 记录器不打印 spring mvc 中的堆栈跟踪

Git 日志别名不起作用

ruby-on-rails - Ruby on Rails ActiveRecord : optimizing increment by one

ruby-on-rails - 工厂女孩,InvalidRecord 错误问题

c - 指定要读取GDB内存区域的文件?

php - 如何在 PHP 中获取有用的错误消息?

java - Log4j 多个文件

ruby-on-rails - 单个 Postgres 数据库中可以存在 20,000 个模式吗?

.net - 我如何告诉 -all- .NET Trace Sources 使用监听器?