Sidekiq::Rails :Class 覆盖默认的 Rails 类



Sidekiq::Rails:Classoverride global Rails::Class

我正在尝试调用 Rails.cache 方法,但我收到错误"Sidekiq::Rails:Class 的未定义方法'缓存'"。我检查了调试器,发现此方法中的"Rails"类类型是Sidekiq::Rails:Class,而不是默认的Rails:Class。我认为在运行时 sidekiq 覆盖了 Rails 主类。

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类,这可以通过::

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

扩展我的答案,如果您有类似以下内容:

module Sidekiq
# body
end

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

最新更新