新的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,但从未遇到过这个问题。
答案 0 :(得分:13)
默认情况下,Rails将包含autoload paths列表中app
文件夹的所有子目录。您可以使用以下命令查看控制台中的自动加载路径列表:
puts ActiveSupport::Dependencies.autoload_paths
但是Rails只在启动时查找这些路径。因此,当您添加新文件夹(如app/workers
)时,仅重新启动Rails控制台是不够的。您需要退出Rails控制台并使用以下命令停止Spring Application Preloader:
spring stop
然后再次启动Rails控制台,app/workers
文件夹中的文件将正确加载。
答案 1 :(得分:2)
我没有安装spring,所以我采取了一种懒惰的方法,并打开了我的 config / environments / development.rb 文件中的紧急加载:
config.eager_load = true
,然后在重新启动服务器后将其恢复为false。