-
Notifications
You must be signed in to change notification settings - Fork 1k
redis rb on Phusion Passenger
didip edited this page Sep 12, 2011
·
12 revisions
Because of the fork() nature of Passenger, you might accidentally share the exact-same Redis connection between Passenger workers. A few harmful things can happen in this situation:
-
User X on worker A might accidentally do unexpected things on User Y's stuff on worker B. For more details, visit: 12.3.1. Example 1: Memcached connection sharing (harmful)
-
If you set your Redis to never disconnect clients(timeout 0), your workers will hold on to that open connection forever. And that may not be desirable.
You need to re-establish Redis connection when a new Passenger worker is created. See code example below:
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
# We're in smart spawning mode.
if forked
# Re-establish redis connection
require 'redis'
redis_config = YAML.load_file("#{Rails.root.to_s}/config/redis.yml")[Rails.env]
# The important two lines
$redis.client.disconnect
$redis = Redis.new(:host => redis_config["host"], :port => redis_config["port"])
end
end
end