From 696779d5897ffa2e39ab13b5f9a552ab90632194 Mon Sep 17 00:00:00 2001 From: Maxwell Salzberg Date: Sat, 2 Jul 2011 12:01:31 -0700 Subject: [PATCH] Revert "remove perform delegate: use a gem that unobtrusivly does the same" the connection adapter messes with single process mode... This reverts commit dd752d7dd93751e561f14ed7480359a3a64b2b4e. --- Gemfile | 2 -- Gemfile.lock | 4 ---- app/models/jobs/base.rb | 11 +++++++++++ app/models/jobs/delete_account.rb | 2 +- app/models/jobs/http_multi.rb | 2 +- app/models/jobs/http_post.rb | 2 +- app/models/jobs/invite_user_by_email.rb | 2 +- app/models/jobs/mail_also_commented.rb | 2 +- app/models/jobs/mail_comment_on_post.rb | 2 +- app/models/jobs/mail_liked.rb | 2 +- app/models/jobs/mail_mentioned.rb | 2 +- app/models/jobs/mail_private_message.rb | 2 +- app/models/jobs/mail_started_sharing.rb | 2 +- app/models/jobs/notify_local_users.rb | 2 +- app/models/jobs/post_to_service.rb | 2 +- app/models/jobs/process_photo.rb | 2 +- app/models/jobs/publish_to_hub.rb | 2 +- app/models/jobs/receive_local_batch.rb | 2 +- app/models/jobs/receive_salmon.rb | 2 +- app/models/jobs/resend_invitation.rb | 2 +- app/models/jobs/socket_webfinger.rb | 2 +- app/models/jobs/update_service_users.rb | 2 +- config/initializers/resque.rb | 7 ++++++- spec/models/jobs/mail_mentioned_spec.rb | 4 ++-- spec/models/jobs/mail_private_message.rb | 2 +- spec/models/jobs/receive_local_batch_spec.rb | 8 ++++---- spec/models/jobs/resend_invitation_spec.rb | 2 +- 27 files changed, 44 insertions(+), 34 deletions(-) diff --git a/Gemfile b/Gemfile index 942d1af47..029e6610e 100644 --- a/Gemfile +++ b/Gemfile @@ -58,7 +58,6 @@ gem "excon", "0.2.4" gem 'mini_magick', '3.2' gem 'aws', '2.3.32' # upgrade to 2.4 breaks 1.8 >.< - gem 'fastercsv', '1.5.4', :require => false gem 'jammit', '0.5.4' gem 'rest-client', '1.6.1' @@ -71,7 +70,6 @@ gem 'cloudfiles', '1.4.10', :require => false #Queue gem 'resque', '1.10.0' -gem 'resque-ensure-connected' gem 'SystemTimer', '1.2.1', :platforms => :ruby_18 group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 4e71c1798..e405192ad 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -351,9 +351,6 @@ GEM redis-namespace (~> 0.8.0) sinatra (>= 0.9.2) vegas (~> 0.1.2) - resque-ensure-connected (0.1.0) - activerecord (>= 2.3.5) - resque (~> 1.10.0) rest-client (1.6.1) mime-types (>= 1.16) rspec (2.6.0) @@ -490,7 +487,6 @@ DEPENDENCIES rails (= 3.0.3) rcov resque (= 1.10.0) - resque-ensure-connected rest-client (= 1.6.1) roxml! rspec (>= 2.0.0) diff --git a/app/models/jobs/base.rb b/app/models/jobs/base.rb index 44383b0ab..bce0a64ec 100644 --- a/app/models/jobs/base.rb +++ b/app/models/jobs/base.rb @@ -1,5 +1,16 @@ module Job class Base extend ResqueJobLogging + + # Perform this job. This wrapper method + def self.perform(*args) + ActiveRecord::Base.verify_active_connections! + self.perform_delegate(*args) + end + + # Override this in your Job class. + # @abstract + def self.perform_delegate(*args) + end end end diff --git a/app/models/jobs/delete_account.rb b/app/models/jobs/delete_account.rb index 7f46000df..9d5ec6082 100644 --- a/app/models/jobs/delete_account.rb +++ b/app/models/jobs/delete_account.rb @@ -6,7 +6,7 @@ module Job class DeleteAccount < Base @queue = :delete_account - def self.perform(user_id) + def self.perform_delegate(user_id) user = User.find(user_id) user.remove_all_traces user.destroy diff --git a/app/models/jobs/http_multi.rb b/app/models/jobs/http_multi.rb index ef3729a66..ada0f4a78 100644 --- a/app/models/jobs/http_multi.rb +++ b/app/models/jobs/http_multi.rb @@ -13,7 +13,7 @@ module Job MAX_RETRIES = 3 OPTS = {:max_redirects => 3, :timeout => 5000, :method => :post} - def self.perform(user_id, enc_object_xml, person_ids, retry_count=0) + def self.perform_delegate(user_id, enc_object_xml, person_ids, retry_count=0) user = User.find(user_id) people = Person.where(:id => person_ids) diff --git a/app/models/jobs/http_post.rb b/app/models/jobs/http_post.rb index a913f02e6..c5532a4e6 100644 --- a/app/models/jobs/http_post.rb +++ b/app/models/jobs/http_post.rb @@ -8,7 +8,7 @@ module Job @queue = :http NUM_TRIES = 3 - def self.perform(url, body, tries_remaining = NUM_TRIES) + def self.perform_delegate(url, body, tries_remaining = NUM_TRIES) begin body = CGI::escape(body) RestClient.post(url, :xml => body){ |response, request, result, &block| diff --git a/app/models/jobs/invite_user_by_email.rb b/app/models/jobs/invite_user_by_email.rb index 7f5c0eed5..83b378124 100644 --- a/app/models/jobs/invite_user_by_email.rb +++ b/app/models/jobs/invite_user_by_email.rb @@ -6,7 +6,7 @@ module Job class InviteUserByEmail < Base @queue = :mail - def self.perform(sender_id, email, aspect_id, invite_message) + def self.perform_delegate(sender_id, email, aspect_id, invite_message) user = User.find(sender_id) user.invite_user(aspect_id, 'email', email, invite_message) end diff --git a/app/models/jobs/mail_also_commented.rb b/app/models/jobs/mail_also_commented.rb index 0d1b472bc..c95aa354d 100644 --- a/app/models/jobs/mail_also_commented.rb +++ b/app/models/jobs/mail_also_commented.rb @@ -1,7 +1,7 @@ module Job class MailAlsoCommented < Base @queue = :mail - def self.perform(recipient_id, sender_id, comment_id) + def self.perform_delegate(recipient_id, sender_id, comment_id) Notifier.also_commented(recipient_id, sender_id, comment_id).deliver end end diff --git a/app/models/jobs/mail_comment_on_post.rb b/app/models/jobs/mail_comment_on_post.rb index 6aee1d08b..2e47018ae 100644 --- a/app/models/jobs/mail_comment_on_post.rb +++ b/app/models/jobs/mail_comment_on_post.rb @@ -1,7 +1,7 @@ module Job class MailCommentOnPost < Base @queue = :mail - def self.perform(recipient_id, sender_id, comment_id) + def self.perform_delegate(recipient_id, sender_id, comment_id) Notifier.comment_on_post(recipient_id, sender_id, comment_id).deliver end end diff --git a/app/models/jobs/mail_liked.rb b/app/models/jobs/mail_liked.rb index a93636e65..5837619ae 100644 --- a/app/models/jobs/mail_liked.rb +++ b/app/models/jobs/mail_liked.rb @@ -1,7 +1,7 @@ module Job class MailLiked < Base @queue = :mail - def self.perform(recipient_id, sender_id, like_id) + def self.perform_delegate(recipient_id, sender_id, like_id) Notifier.liked(recipient_id, sender_id, like_id).deliver end end diff --git a/app/models/jobs/mail_mentioned.rb b/app/models/jobs/mail_mentioned.rb index 4fdc9b478..fbf4cfe13 100644 --- a/app/models/jobs/mail_mentioned.rb +++ b/app/models/jobs/mail_mentioned.rb @@ -6,7 +6,7 @@ module Job class MailMentioned < Base @queue = :mail - def self.perform(recipient_id, actor_id, target_id) + def self.perform_delegate(recipient_id, actor_id, target_id) Notifier.mentioned( recipient_id, actor_id, target_id).deliver diff --git a/app/models/jobs/mail_private_message.rb b/app/models/jobs/mail_private_message.rb index 35530ce49..d372d990a 100644 --- a/app/models/jobs/mail_private_message.rb +++ b/app/models/jobs/mail_private_message.rb @@ -6,7 +6,7 @@ module Job class MailPrivateMessage < Base @queue = :mail - def self.perform(recipient_id, actor_id, target_id) + def self.perform_delegate(recipient_id, actor_id, target_id) Notifier.private_message( recipient_id, actor_id, target_id).deliver end end diff --git a/app/models/jobs/mail_started_sharing.rb b/app/models/jobs/mail_started_sharing.rb index ee914fda6..ddc2eaa8b 100644 --- a/app/models/jobs/mail_started_sharing.rb +++ b/app/models/jobs/mail_started_sharing.rb @@ -6,7 +6,7 @@ module Job class MailStartedSharing < Base @queue = :mail - def self.perform(recipient_id, sender_id, target_id) + def self.perform_delegate(recipient_id, sender_id, target_id) Notifier.started_sharing(recipient_id, sender_id).deliver end end diff --git a/app/models/jobs/notify_local_users.rb b/app/models/jobs/notify_local_users.rb index 538f31c13..e6bbdd387 100644 --- a/app/models/jobs/notify_local_users.rb +++ b/app/models/jobs/notify_local_users.rb @@ -8,7 +8,7 @@ module Job require File.join(Rails.root, 'app/models/notification') - def self.perform(user_ids, object_klass, object_id, person_id) + def self.perform_delegate(user_ids, object_klass, object_id, person_id) users = User.where(:id => user_ids) object = object_klass.constantize.find_by_id(object_id) person = Person.find_by_id(person_id) diff --git a/app/models/jobs/post_to_service.rb b/app/models/jobs/post_to_service.rb index 03cd10b5c..d8bafdca8 100644 --- a/app/models/jobs/post_to_service.rb +++ b/app/models/jobs/post_to_service.rb @@ -6,7 +6,7 @@ module Job class PostToService < Base @queue = :http_service - def self.perform(service_id, post_id, url) + def self.perform_delegate(service_id, post_id, url) service = Service.find_by_id(service_id) post = Post.find_by_id(post_id) service.post(post, url) diff --git a/app/models/jobs/process_photo.rb b/app/models/jobs/process_photo.rb index 5aed92836..fb85368b8 100644 --- a/app/models/jobs/process_photo.rb +++ b/app/models/jobs/process_photo.rb @@ -6,7 +6,7 @@ module Job class ProcessPhoto < Base @queue = :photos - def self.perform(photo_id) + def self.perform_delegate(photo_id) Photo.find(photo_id).process end end diff --git a/app/models/jobs/publish_to_hub.rb b/app/models/jobs/publish_to_hub.rb index 518ae6aff..0c12a9dbd 100644 --- a/app/models/jobs/publish_to_hub.rb +++ b/app/models/jobs/publish_to_hub.rb @@ -6,7 +6,7 @@ module Job class PublishToHub < Base @queue = :http_service - def self.perform(sender_public_url) + def self.perform_delegate(sender_public_url) require File.join(Rails.root, 'lib/pubsubhubbub') atom_url = sender_public_url + '.atom' Pubsubhubbub.new(AppConfig[:pubsub_server]).publish(atom_url) diff --git a/app/models/jobs/receive_local_batch.rb b/app/models/jobs/receive_local_batch.rb index 4d39a0dca..b410e642f 100644 --- a/app/models/jobs/receive_local_batch.rb +++ b/app/models/jobs/receive_local_batch.rb @@ -8,7 +8,7 @@ module Job require File.join(Rails.root, 'lib/postzord/receiver') @queue = :receive - def self.perform(post_id, recipient_user_ids) + def self.perform_delegate(post_id, recipient_user_ids) post = Post.find(post_id) create_visibilities(post, recipient_user_ids) socket_to_users(post, recipient_user_ids) if post.respond_to?(:socket_to_user) diff --git a/app/models/jobs/receive_salmon.rb b/app/models/jobs/receive_salmon.rb index 5c854bfec..040da2cde 100644 --- a/app/models/jobs/receive_salmon.rb +++ b/app/models/jobs/receive_salmon.rb @@ -8,7 +8,7 @@ module Job class ReceiveSalmon < Base @queue = :receive_salmon - def self.perform(user_id, xml) + def self.perform_delegate(user_id, xml) user = User.find(user_id) zord = Postzord::Receiver.new(user, :salmon_xml => xml) zord.perform diff --git a/app/models/jobs/resend_invitation.rb b/app/models/jobs/resend_invitation.rb index 12cf073b4..dded9c1fd 100644 --- a/app/models/jobs/resend_invitation.rb +++ b/app/models/jobs/resend_invitation.rb @@ -6,7 +6,7 @@ module Job class ResendInvitation < Base @queue = :mail - def self.perform(invitation_id) + def self.perform_delegate(invitation_id) inv = Invitation.where(:id => invitation_id).first inv.resend end diff --git a/app/models/jobs/socket_webfinger.rb b/app/models/jobs/socket_webfinger.rb index b36300dac..ec2885708 100644 --- a/app/models/jobs/socket_webfinger.rb +++ b/app/models/jobs/socket_webfinger.rb @@ -8,7 +8,7 @@ module Job @queue = :socket_webfinger - def self.perform(user_id, account, opts={}) + def self.perform_delegate(user_id, account, opts={}) finger = Webfinger.new(account) begin result = finger.fetch diff --git a/app/models/jobs/update_service_users.rb b/app/models/jobs/update_service_users.rb index d24af5a4d..f2ffed498 100644 --- a/app/models/jobs/update_service_users.rb +++ b/app/models/jobs/update_service_users.rb @@ -6,7 +6,7 @@ module Job class UpdateServiceUsers < Base @queue = :http_service - def self.perform(service_id) + def self.perform_delegate(service_id) service = Service.find(service_id) service.save_friends end diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb index bcfa421a1..cc977ba6a 100644 --- a/config/initializers/resque.rb +++ b/config/initializers/resque.rb @@ -8,7 +8,12 @@ begin if Rails.env == 'production' puts "WARNING: You are running Diaspora in production without Resque workers turned on. Please don't do this." end - Resque.inline = true + + module Resque + def enqueue(klass, *args) + klass.send(:perform, *args) + end + end end rescue nil diff --git a/spec/models/jobs/mail_mentioned_spec.rb b/spec/models/jobs/mail_mentioned_spec.rb index ec9056249..5680a3f3f 100644 --- a/spec/models/jobs/mail_mentioned_spec.rb +++ b/spec/models/jobs/mail_mentioned_spec.rb @@ -5,7 +5,7 @@ require 'spec_helper' describe Job::MailMentioned do - describe '#perfom' do + describe '#perfom_delegate' do it 'should call .deliver on the notifier object' do user = alice sm = Factory(:status_message) @@ -15,7 +15,7 @@ describe Job::MailMentioned do mail_mock.should_receive(:deliver) Notifier.should_receive(:mentioned).with(user.id, sm.author.id, m.id).and_return(mail_mock) - Job::MailMentioned.perform(user.id, sm.author.id, m.id) + Job::MailMentioned.perform_delegate(user.id, sm.author.id, m.id) end end end diff --git a/spec/models/jobs/mail_private_message.rb b/spec/models/jobs/mail_private_message.rb index 81598405d..dc1c12914 100644 --- a/spec/models/jobs/mail_private_message.rb +++ b/spec/models/jobs/mail_private_message.rb @@ -21,7 +21,7 @@ describe Job::MailPrivateMessage do mail_mock.should_receive(:deliver) Notifier.should_receive(:mentioned).with(user2.id, user1.person.id, message.id).and_return(mail_mock) - Job::MailMentioned.perform(user2.id, user1.person.id, message.id) + Job::MailMentioned.perform_delegate(user2.id, user1.person.id, message.id) end end end diff --git a/spec/models/jobs/receive_local_batch_spec.rb b/spec/models/jobs/receive_local_batch_spec.rb index 848a50602..650d33e5a 100644 --- a/spec/models/jobs/receive_local_batch_spec.rb +++ b/spec/models/jobs/receive_local_batch_spec.rb @@ -9,18 +9,18 @@ describe Job::ReceiveLocalBatch do @post = alice.build_post(:status_message, :text => 'Hey Bob') @post.save! end - describe '.perform' do + describe '.perform_delegate' do it 'calls .create_visibilities' do Job::ReceiveLocalBatch.should_receive(:create_visibilities).with(@post, [bob.id]) - Job::ReceiveLocalBatch.perform(@post.id, [bob.id]) + Job::ReceiveLocalBatch.perform_delegate(@post.id, [bob.id]) end it 'sockets to users' do Job::ReceiveLocalBatch.should_receive(:socket_to_users).with(@post, [bob.id]) - Job::ReceiveLocalBatch.perform(@post.id, [bob.id]) + Job::ReceiveLocalBatch.perform_delegate(@post.id, [bob.id]) end it 'notifies mentioned users' do Job::ReceiveLocalBatch.should_receive(:notify_mentioned_users).with(@post) - Job::ReceiveLocalBatch.perform(@post.id, [bob.id]) + Job::ReceiveLocalBatch.perform_delegate(@post.id, [bob.id]) end end describe '.create_visibilities' do diff --git a/spec/models/jobs/resend_invitation_spec.rb b/spec/models/jobs/resend_invitation_spec.rb index de7f54074..b07186ba2 100644 --- a/spec/models/jobs/resend_invitation_spec.rb +++ b/spec/models/jobs/resend_invitation_spec.rb @@ -15,7 +15,7 @@ describe Job::ResendInvitation do #Notification.should_receive(:notify).with(instance_of(User), instance_of(StatusMessage), instance_of(Person)) Invitation.stub(:where).with(:id => invitation.id ).and_return([invitation]) invitation.should_receive(:resend) - Job::ResendInvitation.perform(invitation.id) + Job::ResendInvitation.perform_delegate(invitation.id) end end end