Ruby on rails Sidekiq工作不是';t在开发模式下点火,仅在生产模式下点火

Ruby on rails Sidekiq工作不是';t在开发模式下点火,仅在生产模式下点火,ruby-on-rails,docker,sidekiq,rails-activejob,Ruby On Rails,Docker,Sidekiq,Rails Activejob,编辑:我们的团队刚刚告诉我,docker甚至不用于生产。因此,这个问题似乎仅限于Docker,而不是Rails所处的环境 我有一个项目,我正在从事sidekiq工作,在我们的生产环境中,这些工作似乎运行得很好,但在我本地的开发机器中,我在sidekiq上遇到了一系列控制台错误,我不知道为什么 以下是我的sidekiq错误: sidekiq_1 | 2017-03-15T17:16:24.346Z 1 TID-gq075lic0 INFO: Booting Sidekiq 4.2.3 with

编辑:我们的团队刚刚告诉我,docker甚至不用于生产。因此,这个问题似乎仅限于Docker,而不是Rails所处的环境

我有一个项目,我正在从事sidekiq工作,在我们的生产环境中,这些工作似乎运行得很好,但在我本地的开发机器中,我在sidekiq上遇到了一系列控制台错误,我不知道为什么

以下是我的sidekiq错误:

sidekiq_1  | 2017-03-15T17:16:24.346Z 1 TID-gq075lic0 INFO: Booting Sidekiq 4.2.3 with redis options {:url=>"redis://redis:6379/"}
sidekiq_1  | 2017-03-15T17:16:25.240Z 1 TID-gq075lic0 INFO: Running in ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
sidekiq_1  | 2017-03-15T17:16:25.240Z 1 TID-gq075lic0 INFO: See LICENSE and the LGPL-3.0 for licensing details.
sidekiq_1  | 2017-03-15T17:16:25.241Z 1 TID-gq075lic0 INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
sidekiq_1  | 2017-03-15T17:16:25.260Z 1 TID-gq075lic0 INFO: Loading Schedule
sidekiq_1  | 2017-03-15T17:16:25.260Z 1 TID-gq075lic0 INFO: Schedule empty! Set Sidekiq.schedule
sidekiq_1  | 2017-03-15T17:16:25.264Z 1 TID-gq075lic0 INFO: Schedules Loaded
sidekiq_1  | 2017-03-15T17:16:25.266Z 1 TID-gq075lic0 WARN: {"context":"Exception during Sidekiq lifecycle event.","event":"startup"}
sidekiq_1  | 2017-03-15T17:16:25.266Z 1 TID-gq075lic0 WARN: TypeError: can't dup NilClass
sidekiq_1  | 2017-03-15T17:16:25.267Z 1 TID-gq075lic0 WARN: /usr/local/bundle/gems/sidekiq-scheduler-2.0.19/lib/sidekiq-scheduler/schedule.rb:126:in `dup'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-scheduler-2.0.19/lib/sidekiq-scheduler/schedule.rb:126:in `block in prepare_schedule'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-scheduler-2.0.19/lib/sidekiq-scheduler/schedule.rb:125:in `each'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-scheduler-2.0.19/lib/sidekiq-scheduler/schedule.rb:125:in `prepare_schedule'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-scheduler-2.0.19/lib/sidekiq-scheduler/schedule.rb:40:in `schedule='
sidekiq_1  | /gathrly/config/initializers/scheduler.rb:5:in `block (2 levels) in <top (required)>'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-4.2.3/lib/sidekiq/util.rb:54:in `block in fire_event'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-4.2.3/lib/sidekiq/util.rb:52:in `each'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-4.2.3/lib/sidekiq/util.rb:52:in `fire_event'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-4.2.3/lib/sidekiq/cli.rb:79:in `run'
sidekiq_1  | /usr/local/bundle/gems/sidekiq-4.2.3/bin/sidekiq:12:in `<top (required)>'
sidekiq_1  | /usr/local/bundle/bin/sidekiq:17:in `load'
sidekiq_1  | /usr/local/bundle/bin/sidekiq:17:in `<top (required)>'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `load'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `kernel_load'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:27:in `run'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli.rb:335:in `exec'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli.rb:20:in `dispatch'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/cli.rb:11:in `start'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/exe/bundle:32:in `block in <top (required)>'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors'
sidekiq_1  | /usr/local/bundle/gems/bundler-1.14.6/exe/bundle:24:in `<top (required)>'
sidekiq_1  | /usr/local/bundle/bin/bundle:22:in `load'
sidekiq_1  | /usr/local/bundle/bin/bundle:22:in `<main>'
sidekiq_1  | 2017-03-15T17:16:25.268Z 1 TID-gq075lic0 INFO: Starting processing, hit Ctrl-C to stop
web_1      | Puma starting in single mode...
web_1      | * Version 3.6.0 (ruby 2.3.1-p112), codename: Sleepy Sunday Serenity
web_1      | * Min threads: 5, max threads: 5
web_1      | * Environment: development
web_1      | * Listening on tcp://0.0.0.0:3000
但是我得到了一个类错误

这是我的scheduler.rb文件:

require 'sidekiq/scheduler'

Sidekiq.configure_server do |config|
  config.on(:startup) do
    Sidekiq.schedule = YAML.load_file(File.expand_path('../../sidekiq_scheduler.yml', __FILE__))
    Sidekiq::Scheduler.reload_schedule!
  end
end
UpdateEventbriteJob:
  cron: "*/15 * * * *"
UpdateMeetupJob:
  cron: "*/15 * * * *"
PostEventEmailJob:
  # cron: "0 9 * * *"
  # cron: "*/1 * * * *"
UpdateStatusJob:
  cron: "*/1 * * * *" # Every minute for testing. Plan on every 24 hours
和我的sidekiq-scheduler.rb文件:

require 'sidekiq/scheduler'

Sidekiq.configure_server do |config|
  config.on(:startup) do
    Sidekiq.schedule = YAML.load_file(File.expand_path('../../sidekiq_scheduler.yml', __FILE__))
    Sidekiq::Scheduler.reload_schedule!
  end
end
UpdateEventbriteJob:
  cron: "*/15 * * * *"
UpdateMeetupJob:
  cron: "*/15 * * * *"
PostEventEmailJob:
  # cron: "0 9 * * *"
  # cron: "*/1 * * * *"
UpdateStatusJob:
  cron: "*/1 * * * *" # Every minute for testing. Plan on every 24 hours
我正在本地测试
UpdateStatusJob
。其他的工作都是生产性的,看起来很好。但是这个调度器中的任何东西都不会在开发模式下触发。在投入生产之前,我想先测试一下这项工作。我做错了什么

我还应该注意到我在docker中运行东西。一些我不经常使用的东西,所以我不确定这是否会阻碍事情的发展

以下是我的docker compose文件中的相关信息:

version: '2'
services:

  ...

  sidekiq:
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    env_file: .env
    links:
      - db
      - redis

  ...

在scheduler.yml
PostEventEmailJob
中,作业没有任何值,只有注释掉的行

如果将文件更改为:

UpdateEventbriteJob:
  cron: "*/15 * * * *"
UpdateMeetupJob:
  cron: "*/15 * * * *"
PostEventEmailJob:
  cron: "0 9 * * *"
UpdateStatusJob:
  cron: "*/1 * * * *" # Every minute for testing. Plan on every 24 hours

它将正确解析并启动Sidekiq。

开发时yml文件可能位于不同的位置吗?Sidekiq.yml和Sidekiq-scheduler.rb位于rails应用程序的/config中。执行路径可能不同。当sidekiq运行上下文加载时,相对路径依赖于当前目录。我对此不太了解。这是一个新的应用程序,我对sidekiq不太熟悉。我确实知道作业在我们的生产堆栈中运行,这对于开发和暂存是相同的。我在哪里可以学到更多关于这方面的知识?暂存和生产不使用docker,仅供参考。我不知道它是如何显示已加载计划的,但我得到了
dup
错误