无法在lib中加载具有嵌套模块的Sidekiq

时间:2017-05-09 02:54:14

标签: ruby-on-rails sidekiq

对于我正在处理的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/内)中给我和未初始化的常量错误。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你必须遵循Rails&#39;如果您希望Rails自动加载正常工作,则命名文件的约定。

对于名为Scraper :: V2的模块,它应该位于名为scraper/v2.rb的文件中,而不是scraper_v2.rb