未定义的方法`set' for nil:Rails中的NilClass,尽管类似的代码在irb中有效

时间:2017-05-19 19:53:35

标签: ruby-on-rails prometheus

以下代码在IRB(Interactive Ruby Shell)中正常工作: 要求'普罗米修斯/客户'

import {MainScreenNavigator, NavTest} from './path/to/App.js';

2.4.0:018>加载' test.rb' 输出:123.0  =>真正 2.4.0:019>

但是,当我将相同的代码放入我的Ruby on Rails控制器时,第二次用户使用该应用程序时,会返回以下错误: 未定义的方法`set'为零:NilClass

当我做错时,有人可以告诉我吗?谢谢。

prometheus = Prometheus::Client.registry
begin
  @requests = prometheus.gauge(:demo, 'Random number selected for this users turn.')
rescue Prometheus::Client::Registry::AlreadyRegisteredError => e
end
@requests.set({name: "test"}, 123)
test =  @requests.get name: "test"
    puts 'output: ' + test.to_s

1 个答案:

答案 0 :(得分:1)

因为@requests参数没有:demo

当ORM在db中找不到任何信息时,它返回nilNilClass

你正试图这样做:

@requests.set({name: "test"}, 123)

它被解释为:

nil.set({name: "test"}, 123)
  • 为什么它会在第二次导致此问题?
  • cuz您的代码将@requests name属性更改为test,似乎:demo不是test,或者可能是您应用的其他部分您&# 39;重新替换/删除数据库中的数据:@requests = prometheus.gauge(:demo, 'Random number selected for this users turn.')返回nil

解决方案:

在代码级别添加此修复程序以避免此类不可预测的情况(检查nil):

unless @requests.nil?
  @requests.set({name: "test"}, 123)
  test =  @requests.get name: "test"
end