2015-04-02 10 views
11

Ciągle pojawia się błąd Redis :: Timeout w mojej aplikacji (zarówno w interfejsie użytkownika, jak i w pracy w tle). Korzystam z usługi AWS ElastiCache dla Redis.Redis :: Aplikacja TimeoutError w Railsach

W ten sposób tworzę połączenie Redis. W moim pliku config/application.rb:

$redis = Redis.new(host: REDIS_HOST, port: REDIS_PORT, db: REDIS_DB) 

Jak mogę uniknąć błędów przekroczenia limitu czasu? Używam ustawienia połączenia domyślnych następująco:

> $redis.client.options[:reconnect_attempts] 
=> 1 
> $redis.client.options[:timeout] 
=> 5.0 
> $redis.client.options[:tcp_keepalive] 
=> 0 
> $redis.client.options[:inherit_socket] 
=> false 
+1

W jakich okolicznościach otrzymujesz limity czasu? Przy każdej próbie? – soveran

+1

Zdarza się to sporadycznie i nie udało mi się odtworzyć go w wiarygodny sposób. Dowiedziałem się o tym, kiedy wysyłane jest powiadomienie o wyjątku. –

+1

Czy możesz sprawdzić użycie pamięci w aplikacji Ruby, gdy tak się dzieje? Czy to się dzieje, gdy działa garbage collector? – soveran

Odpowiedz

0

Należy połączyć połączeń Redis z pomocą Connection Pool Gem i zwiększyć wartość limitu czasu, jeśli problem będzie się powtarzał:

ConnectionPool.new(size: 5, timeout: 3) {Redis.new({:host => 'localhost', :port => 6379, :db => 1, :timeout => 240})} 

Redis Gem