NoMethodError - неопределенный метод `get 'для nil: NilClass - PullRequest
0 голосов
/ 11 октября 2018

Вот учебник, которым я следую для реализации: Наконец, пробуем 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 - undefinedметод 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 голосов
/ 12 октября 2018

Из комментария @Ilya Konyukhov как определить переменную $redis в методе вашей модели.Понятно, что это должен быть API Redis, но где вы подключаетесь к 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 запущен.

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...