ruby-on-rails - 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
解决方案
您必须参考“根”Rails
类,这可以通过::
:
::Rails.cache.fetch('cities', express_in: 10.days) do
# ...
为了扩展我的答案,如果你有类似的东西:
module Sidekiq
# body
end
它将整体的默认命名空间设置为body
,Sidekiq
因此如果您想引用其中的某个常量,就像您对 所做的那样Rails
,Ruby 会首先搜索Sidekiq::Rails
,然后在命名空间层次结构中向上搜索::Rails
.
推荐阅读
- javascript - 使用 CodeMirror.js 的 Javascript 错误:未捕获的 ReferenceError:未定义 CodeMirror
- javascript - 鼠标悬停时的javascript添加和删除类
- c# - 我的秒表中出现 Thread Sleep 的问题
- android - 使 Android Studio 应用可用于所有设备
- angular - 从 BehaviorSubject 获取用户名并在 Angular 11 中登录后在标题部分显示用户名需要刷新
- angular - Angular 8 部署 - 更新 Ubuntu 后出现单页应用程序问题
- python - 使用 OS 模块创建目录
- java - JavaFX 不显示 JPG 文件
- java - Burp Suite SSL 错误握手失败警报或错误 SSL 协议错误
- swift - 当根进程写入值时,在哪里可以找到 userdefaults.plist 文件?