我刚从使用cookie作为会话存储切换到redis。 配置如下:
# 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
但是,我记得在设置独角兽时,我必须要注意外部连接。 这是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
我是否还必须在Unicorn配置中断开并重新连接Redis?我只使用Redis作为会话存储而不是别的。
赞赏任何意见。
答案 0 :(得分:1)
由于redis-store使用redis-rb,因此需要在Unicorn forks之后创建连接。因此,如果连接已经打开,则必须执行类似于使用Resque执行的操作。
这是一个代码示例:
after_fork do |server, worker|
# Anything else you may have
# ...
Rails.cache.reconnect
end
重新连接的调用将确保每个进程都使用自己的Redis客户端。