2012-07-08 15 views
5

Redis önbellek deposunu kullanmak istiyorum (redis-store gem kullanarak).Rayları Yeniden Başlatma Redis Önbellek deposu üzerine bağlantı Mağaza bağlantısı

Yerel olarak gayet iyi çalışıyor, ancak Yolcu'nun Rails çalışanlarının birden çok örneğini çektiği yerlerde üretim yaparken, Redis erişimiyle ilgili farklı örnekler arasındaki senkronizasyon sorunlarını gösteren Redis hatalarını alıyoruz.

böyle bir hata için bir örnek bazı okuma yapılır ve her Yolcu işçisi örneği kendi Redis bağlantısı oluşturmak gerektiğini öğrendik

Got '7' as initial reply byte. If you're running in a multi-threaded environment, make sure you pass the :thread_safe option when initializing the connection. If you're in a forking environment, such as Unicorn, you need to connect to Redis after forking. 
    redis (2.2.2) lib/redis/connection/ruby.rb:78:in `format_reply' 

olduğunu. bu çözüm büyük - Bu

#config/initializers/redis_fork_init.rb 
if defined?(PhusionPassenger) 
    PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    if forked 
     $redis = Redis.new 
    end 
    end 
end 

varsayarsak Redis erişimi tüm kod $ üzerinde REDIS aracılığıyla yapılır Aşağıdaki kodu kullanarak uygulanmış olabilir.

Sorum şu: - okuma, yazma vb. Gibi Rails.cache işlemleri yaparken kullanacağım yeni bir Redis bağlantısı nasıl oluşturabilirim?

config.cache_store = :redis_store, { :host => 'localhost', :port => 6379, :thread_safe => true } 

Rails 3.2.3, REDIS 2.2.2 kullanarak REDIS mağaza 1.1.1, Yolcu 3,0

cevap

6

bir göz atın:

benim config/ortamlar/production.rb şunları içerir Redis mağazanın yeniden bağlanma yöntemi: https://github.com/jodosha/redis-store/blob/master/redis-activesupport/lib/active_support/cache/redis_store.rb

Yani temelde çatal blok gibi görünmelidir:

if defined?(PhusionPassenger) 
    PhusionPassenger.on_event(:starting_worker_process) do |forked| 
    if forked 
     Rails.cache.reconnect 
    end 
    end 
end 
+1

Ben 'çalışmak için $ redis.reconnect' alamadım ama' Rails.cache.reconnect' hile yaptı. – anthonyfojas

+0

güzel bitti. Cevabını + 1d – Tor

İlgili konular