2013-10-29 15 views
7

Mam aplikację Railsową wdrożoną w Heroku przy użyciu Memcachier (Dalli jako klient). Używam bezpłatnego dodatku (który oferuje pamięć podręczną o wielkości 25 MB).Limit czasu żądania Heroku, gdy Memcachier osiągnie limit pamięci podręcznej

Zaczęliśmy otrzymywać limity czasu żądania od heroku, a po debugowaniu dowiedzieliśmy się, że ręczne przepłukanie Memćeliera rozwiązało problem.

Przekroczenia czasu występują, gdy Memcachier osiągnie poziomy zbliżone do swojego limitu, np. 20 MB (gdy limit wynosi 25 MB).

Dlaczego Memcachier nie zwalnia miejsca w pamięci podręcznej w czasie? Czy istnieje brakująca konfiguracji, aby poinformować Memkachier o wartości , gdy pamięć podręczna osiągnie określony rozmiar?

Moi conf:

environment.rb

config.cache_store = :dalli_store 

production.rb

client = Dalli::Client.new 
config.action_dispatch.rack_cache = { 
    :metastore => client, 
    :entitystore => client, 
    :allow_reload => false 
} 

Odpowiedz

0

Może spróbuj zaktualizować production.rb zawierać socket_timeout i socket_failure_delay opcje.

require 'dalli' 
cache = Dalli::Client.new((ENV["MEMCACHIER_SERVERS"] || "").split(","), 
        {:username => ENV["MEMCACHIER_USERNAME"], 
        :password => ENV["MEMCACHIER_PASSWORD"], 
        :failover => true, 
        :socket_timeout => 1.5, 
        :socket_failure_delay => 0.2 
        }) 

- ALBO -

Jeśli używasz Puma, trzeba mieć zainstalowany connection_pool gem.

Gemfile

gem 'connection_pool' 

A ta konfiguracja w production.rb

config.cache_store = :dalli_store, 
        (ENV["MEMCACHIER_SERVERS"] || "").split(","), 
        {:username => ENV["MEMCACHIER_USERNAME"], 
        :password => ENV["MEMCACHIER_PASSWORD"], 
        :failover => true, 
        :socket_timeout => 1.5, 
        :socket_failure_delay => 0.2, 
        :pool_size => 5 
        }