30 lines
1.1 KiB
Diff
30 lines
1.1 KiB
Diff
|
--- /dev/null 2012-12-22 21:17:05.856026005 +0100
|
||
|
+++ /config/initializers/passenger_fix.rb 2013-01-01 23:11:18.717833817 +0100
|
||
|
@@ -0,0 +1,26 @@
|
||
|
+if defined?(PhusionPassenger)
|
||
|
+
|
||
|
+ # When you're using Passenger with smart-lv2 (default) or smart spawn method,
|
||
|
+ # Resque doesn't recognize that it has been forked and should re-establish
|
||
|
+ # Redis connection. You can see this error message in log:
|
||
|
+ # Redis::InheritedError, Tried to use a connection from a child process
|
||
|
+ # without reconnecting. You need to reconnect to Redis after forking.
|
||
|
+ #
|
||
|
+ # This solution is based on
|
||
|
+ # https://github.com/redis/redis-rb/wiki/redis-rb-on-Phusion-Passenger
|
||
|
+ #
|
||
|
+ PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
||
|
+ # do nothing if we're not in smart spawning mode
|
||
|
+ return unless forked
|
||
|
+
|
||
|
+ # reconnect to Redis
|
||
|
+ Resque.redis.client.reconnect
|
||
|
+
|
||
|
+ # reconnect to cache store unless :memory_store or :null_store is used
|
||
|
+ unless [ActiveSupport::Cache::MemoryStore,
|
||
|
+ ActiveSupport::Cache::NullStore].include? Rails.cache.class
|
||
|
+ Rails.cache.instance_variable_get(:@data).reset
|
||
|
+ end
|
||
|
+ end
|
||
|
+end
|
||
|
+
|