mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Implement generic Ruby support via simple require flag
Various cleanups It's "assert_equal(expected, actual)"
This commit is contained in:
parent
9bb382aaab
commit
a1f78816a7
12 changed files with 49 additions and 77 deletions
2
.rvmrc
2
.rvmrc
|
@ -1,3 +1,3 @@
|
|||
export RUBYOPT="-Ilib"
|
||||
export RUBYOPT="-Ilib:test"
|
||||
export JRUBY_OPTS="--1.9"
|
||||
rvm use 1.9.3@sidekiq --create
|
||||
|
|
34
Gemfile.lock
34
Gemfile.lock
|
@ -1,34 +0,0 @@
|
|||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
sidekiq (0.5.1)
|
||||
celluloid
|
||||
connection_pool
|
||||
multi_json
|
||||
redis
|
||||
redis-namespace
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
specs:
|
||||
celluloid (0.8.0)
|
||||
connection_pool (0.1.0)
|
||||
minitest (2.11.1)
|
||||
multi_json (1.0.4)
|
||||
rake (0.9.2.2)
|
||||
redis (2.2.2)
|
||||
redis-namespace (1.1.0)
|
||||
redis (< 3.0.0)
|
||||
simplecov (0.5.4)
|
||||
multi_json (~> 1.0.3)
|
||||
simplecov-html (~> 0.5.3)
|
||||
simplecov-html (0.5.3)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
minitest
|
||||
rake
|
||||
sidekiq!
|
||||
simplecov
|
|
@ -1,4 +1,4 @@
|
|||
require 'sidekiq/version'
|
||||
require 'sidekiq/client'
|
||||
require 'sidekiq/worker'
|
||||
require 'sidekiq/rails' if defined?(Rails)
|
||||
require 'sidekiq/rails' if defined?(::Rails)
|
||||
|
|
|
@ -12,7 +12,7 @@ module Sidekiq
|
|||
def initialize
|
||||
parse_options
|
||||
validate!
|
||||
boot_rails
|
||||
boot_system
|
||||
end
|
||||
|
||||
FOREVER = 2_000_000_000
|
||||
|
@ -37,10 +37,21 @@ module Sidekiq
|
|||
|
||||
private
|
||||
|
||||
def boot_rails
|
||||
ENV['RAILS_ENV'] = @options[:environment] || ENV['RAILS_ENV'] || 'development'
|
||||
require File.expand_path("#{@options[:rails]}/config/environment.rb")
|
||||
def detected_environment
|
||||
@options[:environment] || ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
|
||||
end
|
||||
|
||||
def boot_system
|
||||
ENV['RACK_ENV'] = ENV['RAILS_ENV'] = detected_environment
|
||||
|
||||
raise ArgumentError, "#{@options[:require]} does not exist" if !File.exist?(@options[:require])
|
||||
|
||||
if File.directory?(@options[:require])
|
||||
require File.expand_path("#{@options[:require]}/config/environment.rb")
|
||||
::Rails.application.eager_load!
|
||||
else
|
||||
require @options[:require]
|
||||
end
|
||||
end
|
||||
|
||||
def validate!
|
||||
|
@ -49,8 +60,12 @@ module Sidekiq
|
|||
|
||||
$DEBUG = @options[:verbose]
|
||||
|
||||
if !File.exist?("#{@options[:rails]}/config/boot.rb")
|
||||
log "========== Please point sidekiq to a Rails 3 application =========="
|
||||
if !File.exist?(@options[:require]) &&
|
||||
!File.exist?("#{@options[:require]}/config/application.rb")
|
||||
log "=================================================================="
|
||||
log " Please point sidekiq to a Rails 3 application or a Ruby file "
|
||||
log " to load your worker classes."
|
||||
log "=================================================================="
|
||||
log @parser
|
||||
exit(1)
|
||||
end
|
||||
|
@ -61,7 +76,7 @@ module Sidekiq
|
|||
:verbose => false,
|
||||
:queues => [],
|
||||
:processor_count => 25,
|
||||
:rails => '.',
|
||||
:require => '.',
|
||||
:environment => nil,
|
||||
}
|
||||
|
||||
|
@ -85,12 +100,12 @@ module Sidekiq
|
|||
@options[:server] = arg
|
||||
end
|
||||
|
||||
o.on '-e', '--environment ENV', "Rails application environment" do |arg|
|
||||
o.on '-e', '--environment ENV', "Application environment" do |arg|
|
||||
@options[:environment] = arg
|
||||
end
|
||||
|
||||
o.on '-r', '--rails PATH', "Location of Rails application with workers" do |arg|
|
||||
@options[:rails] = arg
|
||||
o.on '-r', '--require [PATH|DIR]', "Location of Rails application with workers or file to require" do |arg|
|
||||
@options[:require] = arg
|
||||
end
|
||||
|
||||
o.on '-c', '--concurrency INT', "processor threads to use" do |arg|
|
||||
|
|
|
@ -3,7 +3,7 @@ require 'redis'
|
|||
|
||||
require 'sidekiq/redis_connection'
|
||||
require 'sidekiq/middleware/chain'
|
||||
require 'sidekiq/middleware/client/resque_web_compatability'
|
||||
require 'sidekiq/middleware/client/resque_web_compatibility'
|
||||
require 'sidekiq/middleware/client/unique_jobs'
|
||||
|
||||
module Sidekiq
|
||||
|
@ -51,16 +51,10 @@ module Sidekiq
|
|||
#
|
||||
# Sidekiq::Client.enqueue(MyWorker, 'foo', 1, :bat => 'bar')
|
||||
#
|
||||
# Messages are enqueued to the 'default' queue. Optionally,
|
||||
# MyWorker can define a queue class method:
|
||||
#
|
||||
# def self.queue
|
||||
# 'my_queue'
|
||||
# end
|
||||
# Messages are enqueued to the 'default' queue.
|
||||
#
|
||||
def self.enqueue(klass, *args)
|
||||
queue = (klass.respond_to?(:queue) && klass.queue) || 'default'
|
||||
push(queue, { 'class' => klass.name, 'args' => args })
|
||||
push('default', { 'class' => klass.name, 'args' => args })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,13 +2,14 @@ module Sidekiq
|
|||
# Middleware is code configured to run before/after
|
||||
# a message is processed. It is patterned after Rack
|
||||
# middleware. Middleware exists for the client side
|
||||
# as well as the server side.
|
||||
# (pushing jobs onto the queue) as well as the server
|
||||
# side (when jobs are actually processed).
|
||||
#
|
||||
# Default middleware for the server side:
|
||||
#
|
||||
# Sidekiq::Processor.middleware.register do
|
||||
# use Sidekiq::Airbrake
|
||||
# use Sidekiq::ActiveRecord
|
||||
# use Middleware::Server::Airbrake
|
||||
# use Middleware::Server::ActiveRecord
|
||||
# end
|
||||
#
|
||||
# To add middleware for the client, do:
|
||||
|
|
|
@ -1,17 +1,16 @@
|
|||
module Sidekiq
|
||||
module Middleware
|
||||
module Client
|
||||
class ResqueWebCompatability
|
||||
class ResqueWebCompatibility
|
||||
def initialize(redis)
|
||||
@redis = redis
|
||||
end
|
||||
|
||||
#Add job queue to list of queues resque web displays
|
||||
def call(item, queue)
|
||||
@redis.sadd('queues', queue)
|
||||
|
||||
yield
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
|
@ -15,7 +15,7 @@ module Sidekiq
|
|||
return if already_scheduled?(payload_hash)
|
||||
|
||||
@redis.multi do
|
||||
@redis.set(payload_hash, payload_hash)
|
||||
@redis.set(payload_hash, 1)
|
||||
@redis.expire(payload_hash, HASH_KEY_EXPIRATION)
|
||||
end
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
module Sidekiq
|
||||
VERSION = "0.5.1"
|
||||
VERSION = "0.6.0"
|
||||
end
|
||||
|
|
|
@ -12,13 +12,13 @@ class TestClient < MiniTest::Unit::TestCase
|
|||
it 'does not push duplicate messages when configured for unique only' do
|
||||
Sidekiq::Client.ignore_duplicate_jobs = true
|
||||
10.times { Sidekiq::Client.push('customqueue', 'class' => 'Foo', 'args' => [1, 2]) }
|
||||
assert_equal Sidekiq::Client.redis.llen("queue:customqueue"), 1
|
||||
assert_equal 1, Sidekiq::Client.redis.llen("queue:customqueue")
|
||||
end
|
||||
|
||||
it 'does push duplicate messages when not configured for unique only' do
|
||||
Sidekiq::Client.ignore_duplicate_jobs = false
|
||||
10.times { Sidekiq::Client.push('customqueue2', 'class' => 'Foo', 'args' => [1, 2]) }
|
||||
assert_equal Sidekiq::Client.redis.llen("queue:customqueue2"), 10
|
||||
assert_equal 10, Sidekiq::Client.redis.llen("queue:customqueue2")
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -51,9 +51,6 @@ class TestClient < MiniTest::Unit::TestCase
|
|||
|
||||
class MyWorker
|
||||
include Sidekiq::Worker
|
||||
def self.queue
|
||||
'foo'
|
||||
end
|
||||
end
|
||||
|
||||
it 'handles perform_async' do
|
||||
|
@ -64,7 +61,7 @@ class TestClient < MiniTest::Unit::TestCase
|
|||
end
|
||||
|
||||
it 'enqueues messages to redis' do
|
||||
@redis.expect :rpush, 1, ['queue:foo', String]
|
||||
@redis.expect :rpush, 1, ['queue:default', String]
|
||||
count = Sidekiq::Client.enqueue(MyWorker, 1, 2)
|
||||
assert count > 0
|
||||
@redis.verify
|
||||
|
|
|
@ -29,7 +29,7 @@ class TestMiddleware < MiniTest::Unit::TestCase
|
|||
use CustomMiddleware, 1, []
|
||||
end
|
||||
|
||||
assert_equal chain.entries.last.klass, CustomMiddleware
|
||||
assert_equal CustomMiddleware, chain.entries.last.klass
|
||||
end
|
||||
|
||||
class CustomWorker
|
||||
|
@ -58,7 +58,7 @@ class TestMiddleware < MiniTest::Unit::TestCase
|
|||
processor = Sidekiq::Processor.new(@boss)
|
||||
@boss.expect(:processor_done!, nil, [processor])
|
||||
processor.process(msg)
|
||||
assert_equal recorder.flatten, %w(0 before 1 before work_performed 1 after 0 after)
|
||||
assert_equal %w(0 before 1 before work_performed 1 after 0 after), recorder.flatten
|
||||
end
|
||||
|
||||
it 'allows middleware to abruptly stop processing rest of chain' do
|
||||
|
@ -72,8 +72,8 @@ class TestMiddleware < MiniTest::Unit::TestCase
|
|||
|
||||
final_action = nil
|
||||
chain.invoke { final_action = true }
|
||||
assert_equal final_action, nil
|
||||
assert_equal recorder, []
|
||||
assert_equal nil, final_action
|
||||
assert_equal [], recorder
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Reference in a new issue