Ruby on rails 无法使用库中的嵌套模块加载Sidekiq

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

对于我正在处理的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
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控制台。