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
。
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
。