未初始化的常量 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。
新建 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。