簡體   English   中英

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

[英]NoMethodError - undefined method `get' for nil:NilClass

這是我遵循實現的教程: 最后嘗試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 get' for nil:NilClass Did you mean? gem: app/models/user.rb:34:in inline_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"

謝謝

來自評論@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正在運行。

希望它會奏效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM