我目前在jobs
目录中有以下文件:
# app/jobs/importer.rb
module Imporer
def self.valid_importers
# Do stuff
end
end
# app/jobs/importer/custom_import_job.rb
class Importer::CustomImportJob < ApplicationJob
def perform
# Do stuff
end
end
使用经典的代码加载程序可以正常工作,但当切换到Zeitwerk时,运行rails zeitwerk:check
时会出现NameError: uninitialized constant Importer::CustomImportJob
错误。
我尝试将custom_import_job.rb
移动到jobs
目录,但仍然收到相同的错误。将app/jobs/importer
添加到config.autoload_paths
也没有帮助。
文件结构是否有问题,或者我在Zeitwerk设置中遗漏了什么?
经过一番挖掘,我意识到我在development.rb
中有以下内容:
Dir[Rails.root.join('app/jobs/importer/*.rb')].each { |f| require f }
这似乎就是问题的原因。现在它被移除了,一切都如预期的那样工作!
如果你的应用程序/作业在以下路径中,你可以看看:
ActiveSupport::Dependencies.autoload_paths
必要时在CCD_ 10中扩展CCD_。
更多调试信息:https://guides.rubyonrails.org/autoloading_and_reloading_constants.html#troubleshooting.
- 停止弹簧。重新启动服务器。也可能有所帮助
希望这些能有所帮助。