NoMethodError-未定义的方法`get'for nil:NilClass

时间:2018-10-11 16:21:45

标签: ruby-on-rails ruby websocket redis actioncable

这是我要实施的教程:Finally Trying ActionCable

这段代码太长了,所以我没有把这个代码放在这个问题中,我只是把一些代码放在用户模型中

def online_now?
    $redis.get("users:online:#{id}").present?
end

视图是:

<% User.all.each do |user| %>
    <%= user.name %>
    <div class="online-indicator">
        <% if !user.online_now? && 'xs-none' %>
            Online
        <% else %>
            Offline
        <% end %>
    </div>
<% end %>

但是总是像这样抛出错误

  

NoMethodError-未定义的方法get' for nil:NilClass Did you mean? gem: app/models/user.rb:34:in online_now?'

指示此行

$redis.get("users:online:#{id}").present?

我不为什么抛出此错误。

但是它可以在Rails控制台上正常工作

irb(main):005:0> redis.set("mykey", "hello world")
=> "OK"
irb(main):006:0> redis.get("mykey")
=> "hello world"

谢谢

1 个答案:

答案 0 :(得分:3)

如何通过注释@Ilya Konyukhov在模型方法中定义$redis变量。很明显,它应该是Redis API,但是您应该在哪里连接到Redis并存储其连接?

是的,这是一个非常好的注释,有助于清除注释者的概念。

如果您的Redis服务器正在系统中运行,则需要以Rails自己的方式进行配置,我会编写一些配置文件,如果您已经创建了这些文件,则可以将它们进行比较,如果您尚未创建,则我认为这是问题,如果需要此功能,则需要尽快创建。

首先,安装gem redis-rails

gem 'redis-rails'

然后将其添加到环境文件中

config.cache_store = :redis_store, {
    host: "localhost",
    port: 6379,
    db: 0,
    password: "mysecret",
    namespace: "cache"
}, {
    expires_in: 90.minutes
}

app/config/initializer/中创建文件到redis.rb中,然后放入其中

$redis = Redis.new(:host => 'localhost', :port => 6379)

毕竟重新启动服务器并检出它。

确保redis-server正在运行。

希望它会起作用。

相关问题