【问题标题】:NoMethodError - undefined method `get' for nil:NilClassNoMethodError - nil:NilClass 的未定义方法“get”
【发布时间】:2019-03-16 19:32:15
【问题描述】:

这是我遵循的实现教程: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:inonline_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"

谢谢

【问题讨论】:

  • $redis 为零。你是怎么定义的?
  • $redis.set "users:online:#{current_user.id}", 1 这是订阅方法的行
  • 不,@Pavan 询问您如何在模型方法中定义 $redis 变量。很明显它应该是一个 Redis API,但是你在哪里连接到 Redis 并存储它的连接?

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


【解决方案1】:

来自评论 @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 正在运行。

希望它会起作用。

【讨论】:

    猜你喜欢
    • 2013-11-14
    • 2013-01-14
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多