/ / Rails usando Redis como armazenamento de sessão com Unicorn - ruby-on-rails, session, redis

Rails usando Redis como armazenamento de sessão com Unicorn - ruby-on-rails, sessão, redis

Acabei de mudar de cookie usando o armazenamento de sessão para redis. A configuração é como abaixo:

# 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

No entanto, lembro-me que, ao configurar o unicórnio, tenho que cuidar da conexão externa. Este é um exemplo de 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

Eu também tenho que desconectar e reconectar do Redis na configuração do Unicorn? Eu só uso o Redis como armazenamento de sessão e nada mais.

Qualquer entrada é apreciada.

Respostas:

1 para resposta № 1

Como o redis-store usa o redis-rb, você precisa criar a conexão após os garfos do Unicorn. Então você tem que fazer algo parecido com o que você faz com o Resque se a conexão já estiver aberta.

Aqui está um exemplo de código:

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

Rails.cache.reconnect
end

Essa chamada para reconectar garantirá que cada processo use seu próprio cliente Redis.