如何在 Rails 控制台中运行 ActiveJob 进行调试?
Posted
技术标签:
【中文标题】如何在 Rails 控制台中运行 ActiveJob 进行调试?【英文标题】:How can I run an ActiveJob in Rails console for debugging? 【发布时间】:2016-04-03 19:56:59 【问题描述】:我目前创建了一个 ActiveJob,并使用 Sidekiq 对其进行排队。我想调试这项工作,但是要查看我在其中编程的任何消息,我必须检查我的日志文件。我觉得能够在 Rails 控制台中查看我的工作中的puts
消息会更方便。当我在 Rails 控制台中运行 perform_later
方法时,它只是将作业排队,我从未在控制台中看到消息。有没有办法让它在控制台中看到它们?
【问题讨论】:
我只是打开第二个控制台并跟踪日志...有兴趣看看是否有更好的答案! 【参考方案1】:你可以运行新的,例如Foo.new.perform(ar_1, ar_2)
【讨论】:
【参考方案2】:在development.rb中有一个配置行可以添加
require 'sidekiq/testing/inline'
这应该会为开发启用内联测试。
【讨论】:
【参考方案3】:您可以使用perform_now
运行作业。
例如...
class Foo < ActiveJob::Base
def perform(arg1)
puts "Hello #arg1"
end
end
Foo.perform_now('world')
【讨论】:
【参考方案4】:您可以暂时将队列适配器设置为内联。
现在您在application.rb
中的代码将如下所示:
Rails.application.config.active_job.queue_adapter = :sidekiq
注释掉一行
# Rails.application.config.active_job.queue_adapter = :sidekiq
这将内联运行您的作业,您应该会在控制台中看到结果。
【讨论】:
以上是关于如何在 Rails 控制台中运行 ActiveJob 进行调试?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpsWorks 部署到 Rails 堆栈期间始终运行迁移
运行 rspec 时如何让 Rails.logger 打印到控制台/标准输出?