Skip to content

Commit

Permalink
resque-multi-job-forks recovered + refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
take-five committed Apr 10, 2013
1 parent fdaa3b0 commit 7726900
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 14 deletions.
23 changes: 9 additions & 14 deletions lib/resque/integration/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,31 @@ module Resque::Integration
# @see http://guides.rubyonrails.org/engines.html
class Engine < Rails::Engine
rake_tasks do
load 'resque/integration/tasks/hooks.rake'
load 'resque/integration/tasks/resque.rake'
load 'resque/integration/tasks/supervisor.rake'
end

# Читает конфиг-файлы config/resque.yml и config/resque.local.yml,
# мерджит результаты и сохраняет в Resque.config
initializer 'resque-integration.config' do
paths = Rails.root.join('config', 'resque.yml'),
Rails.root.join('config', 'resque.local.yml')

Resque.config = Resque::Integration::Configuration.new(*paths.map(&:to_s))
end

# Устанавливает для Resque соединение с Редисом,
# данные берутся из конфига (см. выше)
initializer 'resque-integration.redis' do
redis = Resque.config.redis

Resque.redis = [redis.host, redis.port, redis.db].join(':')
Resque.redis.namespace = redis.namespace

# Reconnect on each fork
if Redis::VERSION < '3.0.0'
Resque.after_fork { Resque.redis.client.reconnect }
end
end

# Конфигурирование плагина resque-failed-job-mailer.
# Данные берутся из конфига (см. выше)
initializer 'resque-integration.failure_notifier' do
notifier = Resque.config.failure_notifier

Expand All @@ -47,12 +49,5 @@ class Engine < Rails::Engine
end
end
end

initializer 'resque-multi-job-forks.hook' do
# Support for resque-multi-job-forks
if ENV['JOBS_PER_FORK'] || ENV['MINUTES_PER_FORK']
Resque.after_fork { ActiveRecord::Base.connection.reconnect! }
end
end
end
end
end # class Engine
end # module Resque::Integration
32 changes: 32 additions & 0 deletions lib/resque/integration/tasks/hooks.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# coding: utf-8

namespace :resque do
# Здесь мы добавляем некоторые необходимые для корректной работы "хуки".
#
# @see https://github.com/resque/resque/tree/1-x-stable#workers
task :setup => :environment do
# Reestablish Redis connection for each fork
# Tested on both redis-2.2.x and redis-3.0.x
#
# @see https://groups.google.com/forum/#!msg/ror2ru/CV96h5OGDxY/IqZbRsl-BcIJ
Resque.before_fork { Resque.redis.client.disconnect }
Resque.after_fork { Resque.redis.client.connect }

# Нужно закрыть все соединения в **родительском** процессе,
# все остальное делает гем `resque-ensure-connected`.
#
# Вообще, он делает буквально следующее:
# Resque.after_fork { ActiveRecord::Base.connection_handler.verify_active_connections! }
#
# Это работает
Resque.before_fork { ActiveRecord::Base.connection_handler.clear_all_connections! }

# Нужно также закрыть соединение к memcache
Resque.before_fork { Rails.cache.reset if Rails.cache.respond_to?(:reset) }

# Support for resque-multi-job-forks
if ENV['JOBS_PER_FORK'] || ENV['MINUTES_PER_FORK']
require 'resque-multi-job-forks'
end
end
end

0 comments on commit 7726900

Please sign in to comment.