我一直在努力弄清楚为什么我的工人不在生产模式下工作,但他们在开发模式下工作。这是我发现的。
- 在开发和生产模式下,我可以使用
rails c
命令查看数据库中的内容,并且它是准确的。 - 但是,如果我放置一个
binding.pry
来在运行时暂停我的工作,则它在模型中看不到任何项目。这没有任何意义。事实上,我可以做Campaign.all
,它在那里什么也没显示,然后直接回到 rails 控制台并执行Campaign.all
,它会显示。
有什么想法吗?
以下是 rails 控制台和binding.pry
暂停的输出:
$ rails c
2.5.1 :009 > SidekiqTask.first
SidekiqTask Load (0.4ms) SELECT `sidekiq_tasks`.* FROM `sidekiq_tasks` ORDER BY `sidekiq_tasks`.`id` ASC LIMIT 1
=> #<SidekiqTask id: 5, campaign_id: 1, job_id: "c19d37f4c70060d3b59059b0", task: "Start Campaign", created_at: "2018-10-04 20:11:03", updated_at: "2018-10-04 20:11:03">
然后这是另一个
[4] pry(#<CampaignWorker>)> SidekiqTask.first
=> nil
知道这里可能发生了什么吗?此问题仅在工作线程运行时发生,因此在模型中看不到任何内容。如果我在控制器中查找它,它看起来很好。
刚刚发现这是因为我的 Sidekiq 实例没有在生产模式下运行。我通过运行以下命令修复了此问题:
bundle exec sidekiq --environment production