From 6d009504a02fecb822820e18abd69dd569f72e82 Mon Sep 17 00:00:00 2001 From: Abdelkader Boudih Date: Mon, 19 May 2014 18:09:45 +0000 Subject: Add Que Adapter/Wrapper --- Gemfile | 1 + Gemfile.lock | 12 +++++++----- README.md | 18 ++++++++++-------- Rakefile | 4 ++-- lib/active_job/queue_adapters/que_adapter.rb | 19 +++++++++++++++++++ test/adapters/que.rb | 2 ++ test/cases/adapter_test.rb | 26 ++++++++++++++++++-------- 7 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 lib/active_job/queue_adapters/que_adapter.rb create mode 100644 test/adapters/que.rb diff --git a/Gemfile b/Gemfile index e40962dc92..a9803f9284 100644 --- a/Gemfile +++ b/Gemfile @@ -9,3 +9,4 @@ gem 'sucker_punch' gem 'delayed_job' gem 'queue_classic' gem 'sneakers', '0.1.1.pre' +gem 'que' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 5f5745b53b..ff4e994b44 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -33,21 +33,22 @@ GEM json (1.8.1) minitest (5.3.4) mono_logger (1.1.0) - multi_json (1.9.3) + multi_json (1.10.1) pg (0.17.1) + que (0.7.3) queue_classic (2.2.3) pg (~> 0.17.0) rack (1.5.2) - rack-protection (1.5.2) + rack-protection (1.5.3) rack rake (10.3.2) redis (3.0.7) redis-namespace (1.4.1) redis (~> 3.0.4) - resque (1.24.1) + resque (1.25.2) mono_logger (~> 1.0) multi_json (~> 1.0) - redis-namespace (~> 1.2) + redis-namespace (~> 1.3) sinatra (>= 0.9.2) vegas (~> 0.1.2) serverengine (1.5.7) @@ -59,7 +60,7 @@ GEM redis (>= 3.0.6) redis-namespace (>= 1.3.1) sigdump (0.2.2) - sinatra (1.4.4) + sinatra (1.4.5) rack (~> 1.4) rack-protection (~> 1.4) tilt (~> 1.3, >= 1.3.4) @@ -86,6 +87,7 @@ PLATFORMS DEPENDENCIES activejob! delayed_job + que queue_classic rake resque diff --git a/README.md b/README.md index ca6e2c1e4b..e8e12e859c 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ of the request-response cycle, so the user doesn't have to wait on it. The main point is to ensure that all Rails apps will have a job infrastructure in place, even if it's in the form of an "immediate runner". We can then have framework features and other gems build on top of that, without having to worry -about API differences between Delayed Job and Resque. Picking your queuing +about API differences between Delayed Job and Resque. Picking your queuing backend becomes more of an operational concern, then. And you'll be able to switch between them without having to rewrite your jobs. @@ -24,7 +24,8 @@ Set the queue adapter for Active Job: ``` ruby ActiveJob::Base.queue_adapter = :inline # default queue adapter -# Adapters currently supported: :resque, :sidekiq, :sucker_punch, :delayed_job, :queue_classic, :sneakers +# Adapters currently supported: :delayed_job, :que, :queue_classic, :resque, +# :sidekiq, :sneakers, :sucker_punch ``` Declare a job like so: @@ -79,12 +80,13 @@ by default has been mixed into Active Record classes. We currently have adapters for: -* Resque 1.x -* Sidekiq -* Sucker Punch -* Delayed Job -* QueueClassic -* Sneakers +* [Delayed Job](https://github.com/collectiveidea/delayed_job) +* [Que](https://github.com/chanks/que) +* [QueueClassic](https://github.com/ryandotsmith/queue_classic) +* [Resque 1.x](https://github.com/resque/resque) +* [Sidekiq](https://github.com/mperham/sidekiq) +* [Sneakers](https://github.com/jondot/sneakers) +* [Sucker Punch](https://github.com/brandonhilkert/sucker_punch) ## Under development as a gem, targeted for Rails inclusion diff --git a/Rakefile b/Rakefile index e0d8e8e0d8..933c049a68 100644 --- a/Rakefile +++ b/Rakefile @@ -20,11 +20,11 @@ task :default => :test desc 'Run all adapter tests' task :test do - tasks = %w(test_inline test_resque test_sidekiq test_sucker_punch test_delayed_job test_queue_classic test_sneakers) + tasks = %w(test_inline test_delayed_job test_que test_queue_classic test_resque test_sidekiq test_sneakers test_sucker_punch) run_without_aborting(*tasks) end -%w(inline resque sidekiq sucker_punch delayed_job queue_classic sneakers).each do |adapter| +%w(inline delayed_job que queue_classic resque sidekiq sneakers sucker_punch).each do |adapter| Rake::TestTask.new("test_#{adapter}") do |t| t.libs << 'test' t.test_files = FileList['test/cases/**/*_test.rb'] diff --git a/lib/active_job/queue_adapters/que_adapter.rb b/lib/active_job/queue_adapters/que_adapter.rb new file mode 100644 index 0000000000..6750882b91 --- /dev/null +++ b/lib/active_job/queue_adapters/que_adapter.rb @@ -0,0 +1,19 @@ +require 'que' + +module ActiveJob + module QueueAdapters + class QueAdapter + class << self + def queue(job, *args) + JobWrapper.enqueue job, *args, queue: job.queue_name + end + end + + class JobWrapper < Que::Job + def run(job, *args) + job.new.perform *Parameters.deserialize(args) + end + end + end + end +end diff --git a/test/adapters/que.rb b/test/adapters/que.rb new file mode 100644 index 0000000000..640061bf54 --- /dev/null +++ b/test/adapters/que.rb @@ -0,0 +1,2 @@ +ActiveJob::Base.queue_adapter = :que +Que.mode = :sync diff --git a/test/cases/adapter_test.rb b/test/cases/adapter_test.rb index 05efdc33e9..e922750ab4 100644 --- a/test/cases/adapter_test.rb +++ b/test/cases/adapter_test.rb @@ -10,26 +10,36 @@ class AdapterTest < ActiveSupport::TestCase assert_equal ActiveJob::QueueAdapters::InlineAdapter, ActiveJob::Base.queue_adapter end - test 'should load resque adapter' do + test 'should load Delayed Job adapter' do + ActiveJob::Base.queue_adapter = :delayed_job + assert_equal ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter + end + + test 'should load Que adapter' do + ActiveJob::Base.queue_adapter = :que + assert_equal ActiveJob::QueueAdapters::QueAdapter, ActiveJob::Base.queue_adapter + end + + test 'should load Queue Classic adapter' do + ActiveJob::Base.queue_adapter = :queue_classic + assert_equal ActiveJob::QueueAdapters::QueueClassicAdapter, ActiveJob::Base.queue_adapter + end + + test 'should load Resque adapter' do ActiveJob::Base.queue_adapter = :resque assert_equal ActiveJob::QueueAdapters::ResqueAdapter, ActiveJob::Base.queue_adapter end - test 'should load sidekiq adapter' do + test 'should load Sidekiq adapter' do ActiveJob::Base.queue_adapter = :sidekiq assert_equal ActiveJob::QueueAdapters::SidekiqAdapter, ActiveJob::Base.queue_adapter end - test 'should load sucker punch adapter' do + test 'should load Sucker Punch adapter' do ActiveJob::Base.queue_adapter = :sucker_punch assert_equal ActiveJob::QueueAdapters::SuckerPunchAdapter, ActiveJob::Base.queue_adapter end - test 'should load delayed_job adapter' do - ActiveJob::Base.queue_adapter = :delayed_job - assert_equal ActiveJob::QueueAdapters::DelayedJobAdapter, ActiveJob::Base.queue_adapter - end - def teardown ActiveJob::Base.queue_adapter = @old_adapter end -- cgit v1.2.3