对于我正在处理的Rails项目,我遇到了加载Sidekiq并在lib目录中嵌套模块的问题。
我的lib/scraper/v2.rb
看起来像这样:
require 'scraper/v2/client'
module Scraper
module V2
end
end
我的lib/scraper/v2/client.rb
看起来像这样:
module Scraper
module V2
class Client
def initialize
...
end
end
end
end
然后我在jobs
目录中有一个Sidekiq作业,如下所示:
class RefreshTokenJob < ApplicationJob
queue_as :default
def perform
client = Scraper::V2::Client.new
...
end
end
如果我使用此配置运行bundle exec sidekiq
,Sidekiq启动,但从Rails控制台运行Scraper::V2::Client.new
返回:
NameError: uninitialized constant Scraper::V2
如果我将config.autoload_paths += %W(#{config.root}/lib)
添加到我的application.rb文件中,我可以运行Scraper::V2::Client.new
,但是启动Sidekiq会从一个完全不同的文件(app/jobs/concerns/
内)中给我和未初始化的常量错误。
非常感谢任何帮助!
答案 0 :(得分:0)
你必须遵循Rails&#39;如果您希望Rails自动加载正常工作,则命名文件的约定。
对于名为Scraper :: V2的模块,它应该位于名为scraper/v2.rb
的文件中,而不是scraper_v2.rb
。