Skip to content

Instantly share code, notes, and snippets.

@bogdan
Created October 27, 2011 09:07
Show Gist options
  • Save bogdan/1319113 to your computer and use it in GitHub Desktop.
Save bogdan/1319113 to your computer and use it in GitHub Desktop.
require "resque"
require "resque_mailer"
require 'resque/failure'
require 'resque/failure/redis'
require 'resque/failure/multiple'
require "resque/failure/airbrake"
require 'resque/plugins/retry'
require "resque-retry"
require "resque-loner"
require "resque_scheduler"
require "ar_after_transaction"
require 'resque-cleaner'
# TODO: RESQUE-NEWRELIC
# require "newrelic_rpm"
# require 'rpm_contrib/instrumentation/resque'
# Load YAML config
resque_config_file = File.join(RAILS_ROOT, 'config', 'resque.yml')
raise("cannot read #{resque_config_file}") unless File.exists? resque_config_file
resque_config = YAML.load(ERB.new(IO.read(resque_config_file)).result)
raise("cannot load #{resque_config_file}") unless resque_config
Resque.redis = resque_config[RAILS_ENV]
Resque.redis.client.logger = Rails.logger
Resque::Failure::Airbrake.configure do |config|
config.api_key = '2df69e491894cc2878776bc2656c1953' # sorry for copy-past
config.ignore_only = []
end
Resque::Failure::MultipleWithRetrySuppression.configure do |config|
config.classes = [Resque::Failure::Redis, Resque::Failure::Airbrake]
end
Resque::Failure.backend = Resque::Failure::MultipleWithRetrySuppression
Resque::Scheduler.dynamic = true
Resque::Mailer.default_queue_name = :mailer
Resque::Mailer.excluded_environments = [:test, :cucumber]
Resque.inline = ENV['RESQUE_INLINE'] || Rails.env.test?
Resque.class_eval do
class << self
#
# This hook makes Resque to wait until all DB transactions completed before put job to Redis queue
# https://github.com/grosser/ar_after_transaction
#
alias_method :enqueue_without_transaction, :enqueue
def enqueue(*args)
ActiveRecord::Base.after_transaction do
enqueue_without_transaction(*args)
end
end
alias_method :enqueue_at_without_transaction, :enqueue_at
def enqueue_at(*args)
ActiveRecord::Base.after_transaction do
if Resque.inline?
enqueue(*args)
else
enqueue_at_without_transaction(*args)
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment