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 № 1Ponieważ 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.