如何在 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 打印到控制台/标准输出?

Rails创建一个简单的函数,在系统范围的控制台中运行

rails如何从命令行调用运行本地服务器的控制器操作[重复]

我们如何查看 Rails 开发日志?

如何在 ruby​​ on rails 中获取控制器和操作列表?