/ / Railsy używające Redis jako magazynu sesji z Unicornem - ruby-on-rails, session, redis

Szyny używające Redis jako magazynu sesji z Unicornem - ruby-on-rails, session, redis

Właśnie przełączyłem się z używania cookie jako magazynu sesji na redis. Konfiguracja jest następująca:

# Gemfile
gem "redis-rails", group: :production

# config/initializers/session_store.rb
if ENV["RAILS_ENV"] == "production"
Rails.application.config.session_store :redis_store, redis_server: ENV["REDISCLOUD_URL"], expires_in: 60.minutes
else
Rails.application.config.session_store :cookie_store, key: "_marketplace_session"
end

Pamiętam jednak, że podczas zakładania jednorożca muszę dbać o połączenie zewnętrzne. To jest przykład Resque

before_fork do |server, worker|
# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis.quit
Rails.logger.info("Disconnected from Redis")
end
end

after_fork do |server, worker|
# If you are using Redis but not Resque, change this
if defined?(Resque)
Resque.redis = ENV["<REDIS_URI>"]
Rails.logger.info("Connected to Redis")
end
end

Czy muszę też odłączyć się i ponownie połączyć z Redis w konfiguracji Unicorn? Używam tylko Redis jako magazynu sesji i nic więcej.

Dowolne wejście jest doceniane.

Odpowiedzi:

1 dla odpowiedzi № 1

Ponieważ redis-store używa redis-rb, musisz utworzyć połączenie po rozwidleniu Unicorn. Musisz więc zrobić coś podobnego do tego, co zrobisz z Resque, jeśli połączenie jest już otwarte.

Oto przykład kodu:

after_fork do |server, worker|
# Anything else you may have
# ...

Rails.cache.reconnect
end

To wezwanie do ponownego połączenia zapewni, że każdy proces będzie korzystał z własnego klienta Redis.