未初始化的常量 sidekiq worker

uninitialized constant sidekiq worker

新建 rails 项目。

Rails 5.0.2 Sidekiq 4.2.10

我运行rails g sidekiq:worker deposit_collector然后在perform方法里面填写我需要的代码

为了测试,我登录到 rails 控制台并输入:DepositCollector.perform_async,然后我收到错误:

NameError: uninitialized constant DepositCollectorWorker

工作人员位于 app/workers/ 文件夹中。我以前在几个项目中使用过 sidekiq,但从来没有 运行 使用过这个。

默认情况下,Rails 将在 autoload paths 列表中包含 app 文件夹的所有子目录。您可以在控制台中查看自动加载路径列表:

puts ActiveSupport::Dependencies.autoload_paths

但 Rails 仅在启动时查找这些路径。因此,当您添加新文件夹时,例如 app/workers,重新启动 Rails 控制台是不够的。您需要同时退出 Rails 控制台并停止 Spring Application Preloader

spring stop

然后再次启动 Rails 控制台,app/workers 文件夹中的文件将正确加载。

我没有安装 spring 所以我采用了懒惰的方法并在我的 config/environments/development.rb 文件中打开了预先加载:

config.eager_load = true

然后在重新启动我的服务器后将其恢复为 false。