【问题标题】:Circular dependency problems when using Sidekiq and module naming schema使用 Sidekiq 和模块命名模式时的循环依赖问题
【发布时间】:2014-05-15 18:00:40
【问题描述】:

早上好,我们在使用 Sidekiq 处理队列时遇到了烦人的问题。这个问题似乎发生在我们第一次执行 Sidekiq(渴望加载资源)和生产环境中。

基本上,我们将我们的类在模块中分开,以获得更好的命名模式。

这是一个出现问题的示例模块

module MyApp
  module APIIntegration
    class Client          
       def driver
         @driver ||= MyApp::APIIntegration::Driver.new
       end  
    end
  end
end 

我们得到“自动加载常量 MyApp::APIIntegration::Driver 时检测到循环依赖”

知道为什么会这样吗?我们应该通过调用 Driver 而不是完全限定名称来引用驱动程序吗?我可以尝试如何重现此问题?

欢迎任何建议,非常感谢

【问题讨论】:

  • 能把Driver Module/Class的代码和这些文件的存放路径显示出来吗?
  • 这不是循环依赖问题。这是因为模块的命名和文件的位置
  • 它们处于同一级别。类似于 /lib/my_app/api_integration/client.rb 和 /lib/my_app/api_integration/driver.rb
  • 1. module APIIntegration 应该是 module ApiIntegration 2. @driver ||= MyApp::APIIntegration::Driver.new@driver ||= Driver.new

标签: ruby-on-rails ruby autoload sidekiq


【解决方案1】:

应该是这样的

module MyApp
  module APIIntegration
    class Client          
       def driver
         @driver ||= Driver.new
       end  
    end
  end
end 

【讨论】:

    猜你喜欢
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 2021-09-18
    • 2014-04-15
    相关资源
    最近更新 更多