Sidekiq::Rails:Class 覆盖默认 Rails class

Sidekiq::Rails:Class overrides default Rails class

Sidekiq::Rails:Class 覆盖全局 Rails::Class

我正在尝试调用 Rails.cache 方法,但出现错误 "undefined method `cache' for Sidekiq::Rails:Class"。我检查了调试器,发现此方法中的“Rails”class 类型是 Sidekiq::Rails:Class 而不是默认的 Rails:Class。我认为在运行时 sidekiq 覆盖了 Rails main class。

  def index
  ##
     ## >>>>>> Rails here is identified as Sidekiq::Rails:Class
     @cities = Rails.cache.fetch("cities", :expires_in => 10.days) do
       City.all
     end
     render :json => {:list => @cities}
  end

你要参考'root' Rails class,可以用:::

::Rails.cache.fetch('cities', express_in: 10.days) do
  # ...

为了扩展我的回答,如果你有类似的东西:

module Sidekiq
  # body
end

它将整个 body 的默认命名空间设置为 Sidekiq,因此如果您想引用其中的某个常量,就像您对 Rails 所做的那样,Ruby 首先搜索 Sidekiq::Rails,然后向上搜索命名空间层次结构,搜索 ::Rails