Ruby on rails 无法使用库中的嵌套模块加载Sidekiq
对于我正在处理的Rails项目,我在加载Sidekiq和在lib目录中嵌套模块方面遇到了问题 我的Ruby on rails 无法使用库中的嵌套模块加载Sidekiq,ruby-on-rails,sidekiq,Ruby On Rails,Sidekiq,对于我正在处理的Rails项目,我在加载Sidekiq和在lib目录中嵌套模块方面遇到了问题 我的lib/scraper/v2.rb如下所示: require 'scraper/v2/client' module Scraper module V2 end end module Scraper module V2 class Client def initialize ... end end end end cla
lib/scraper/v2.rb
如下所示:
require 'scraper/v2/client'
module Scraper
module V2
end
end
module Scraper
module V2
class Client
def initialize
...
end
end
end
end
class RefreshTokenJob < ApplicationJob
queue_as :default
def perform
client = Scraper::V2::Client.new
...
end
end
我的lib/scraper/v2/client.rb
如下所示:
require 'scraper/v2/client'
module Scraper
module V2
end
end
module Scraper
module V2
class Client
def initialize
...
end
end
end
end
class RefreshTokenJob < ApplicationJob
queue_as :default
def perform
client = Scraper::V2::Client.new
...
end
end
然后我在jobs
目录中有一个Sidekiq作业,如下所示:
require 'scraper/v2/client'
module Scraper
module V2
end
end
module Scraper
module V2
class Client
def initialize
...
end
end
end
end
class RefreshTokenJob < ApplicationJob
queue_as :default
def perform
client = Scraper::V2::Client.new
...
end
end
如果我将config.autoload\u路径+=%W(#{config.root}/lib)
添加到我的application.rb文件中,我可以运行Scraper::V2::Client.new
,但启动Sidekiq会从一个完全不同的文件(在app/jobs/concerns/
中)中产生未初始化的常量错误
在此方面的任何帮助都将不胜感激 如果希望Rails自动加载正常工作,则必须遵循Rails命名文件的约定
对于名为Scraper::V2的模块,它应该位于名为
Scraper/V2.rb
的文件中,而不是Scraper\u V2.rb
V2实际上是Scraper中的嵌套模块。我想用Scraper::V2::client.new
初始化客户机。scraper/v2/client.rb
不正确吗?我现在已将scraper\u v2.rb
放在lib/scraper/v2.rb
中。后者需要scraper/v2/client。但是,我仍然收到以下错误:namererror:uninitialized constant Scraper::V2
。知道原因吗?你重启服务器和/或spring了吗?我重启了,是的。Rails自动加载只有在文件命名正确的情况下才有效,这意味着你的模块应该挂在scraper/v2.rb
,而不是lib/scraper\u v2.rb
。我现在把它放在lib/scraper/v2.rb
中。后者需要scraper/v2/client
。但是,我仍然收到以下错误:namererror:uninitialized constant Scraper::V2
是否继承自ActiveJob::Base
?我相信是的,但值得一问。您是否有其他名为Scraper
的类或模块?还要确保重新启动Rails服务器。我相信是的。我在application.rb
中配置了以下内容:config.active\u job.queue\u adapter=:sidekiq
,我认为Rails 5自动允许ActiveJob以这种方式与sidekiq接口。是的,我也重新启动了rails控制台。