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
。