首页 > 解决方案 > Sidekiq::Rails:Class 覆盖默认的 Rails 类

问题描述

Sidekiq::Rails:Class 覆盖全局 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

标签: ruby-on-railsrubysidekiq

解决方案


您必须参考“根”Rails类,这可以通过::

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

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

module Sidekiq
  # body
end

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


推荐阅读