delayed_job_celluloid 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmNjODUyMWU4YjE2ZWE2ZDBjNjk5OTIxM2U0ZTNmNWU2YTcyODczOA==
5
- data.tar.gz: !binary |-
6
- ZGZjMTFhZmE4ZjhhNTQ5ZjU5YjFiYjM0ZWM0MjA3YTE3N2UzZWU4MQ==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- MjJkYjY2OWFlYmVjZjQ1Zjc0MGI3ODYxYWM5M2UxYmUwNzFkMWQzYWQ0OTlm
10
- MjFiYzhhZDU0ZDExNWNjNjY4NGNhMmQ5NGIyNWJiZjA3NmI2YzAwYmQzYzBk
11
- YjI0MDZkOGY1YmQ1YzIwMzQ1OGQ1ODhmMGMxODIyMDI0OGUxMGM=
12
- data.tar.gz: !binary |-
13
- NjAzMDMyNjNlNWQ5Njg1NjA2NzhkMjUxNzRlOTNhMGMwNmI4MzBkYzFlZWRi
14
- ZDVhNjg5NmE5ZWM2ZDlkYWEwNGMzZjQxNTQ5NjE5OTRlZGEyOGRmYWJkMWNh
15
- MTUxYzRkYjBlMTQ1ZjM1MWRiMmU5Y2JhN2IzMDI3NWMwZjUwZTM=
2
+ SHA1:
3
+ metadata.gz: 13f46b03b4a215168b557850cf06ff0722e4dc6b
4
+ data.tar.gz: d5e2e5876c613d67497f6ea7dda79fd79c6bae99
5
+ SHA512:
6
+ metadata.gz: 1fd4632b88ea294c93b012de18da796d977ba8618c42131930449794c6c01f39c6cb05de110a98fa7587fad15be637bc4ce9c1761ee4190bb5d3e1821a2a8e11
7
+ data.tar.gz: 1dac98c0b4c006d422d03052811196514bb05718971f00c0775d6fb12a8261c060cc492079eef75cb34891a12d5cd2084b91c100241a6d33d041f3689ced79a7
data/README.md CHANGED
@@ -6,7 +6,7 @@ Based on awesome gems like Sidekiq and Suckerpunch, DelayedJobCelluloid allows d
6
6
 
7
7
  Add delayed_job_celluloid to your gem file
8
8
 
9
- gem 'delayed_job_celluloid
9
+ gem 'delayed_job_celluloid'
10
10
 
11
11
  Run bundle install
12
12
 
@@ -36,7 +36,20 @@ One important thing to bear in mind with this is that you should have a database
36
36
  host: localhost
37
37
  pool: 5
38
38
 
39
- Currently the gem does not support daemonization of the main process because I haven't needed it as I am using it in conjuction with Unicorn on Heroku. If you are running your app on Heroku, this gem will allow you to run multiple workers in a single Unicorn process. An example unicorn config is as follows:
39
+ The gem also does not work particularly well with Sqlite since Sqlite does not handle concurrent reads/writes. You will see locking errors, although delayed job handles these gracefully by retrying the job later.
40
+
41
+ ## Daemonization
42
+
43
+ script/delayed_job_celluloid -d start
44
+ script/delayed_job_celluloid -d stop
45
+
46
+ You can also start the daemon with a monitor process that will restart the daemon if it crashes
47
+
48
+ script/delayed_job_celluloid -d -m start
49
+
50
+ ##Heroku
51
+
52
+ If you are running your app on Heroku, this gem will allow you to run multiple workers in a single Unicorn process. An example unicorn config is as follows:
40
53
 
41
54
  # config/unicorn.rb
42
55
  worker_processes Integer(ENV["WEB_CONCURRENCY"] || 2)
@@ -67,8 +80,6 @@ Currently the gem does not support daemonization of the main process because I h
67
80
  ActiveRecord::Base.establish_connection
68
81
  end
69
82
 
70
- If you are interested in adding daemonization to the gem itself, feel free to fork it and submit a pull request.
71
-
72
83
  ## Contributing
73
84
 
74
85
  1. Fork it
data/Rakefile CHANGED
@@ -1,11 +1,30 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rake/testtask'
3
3
 
4
- Rake::TestTask.new(:test) do |test|
4
+ Rake::TestTask.new(:test_launcher) do |test|
5
5
  test.libs << 'test'
6
6
  #SO MUCH NOISE
7
7
  #test.warning = true
8
- test.pattern = 'spec/**/*_spec.rb'
8
+ test.pattern = 'spec/launcher_spec.rb'
9
9
  end
10
10
 
11
- task :default => :test
11
+ Rake::TestTask.new(:test_manager) do |test|
12
+ test.libs << 'test'
13
+ #SO MUCH NOISE
14
+ #test.warning = true
15
+ test.pattern = 'spec/manager_spec.rb'
16
+ end
17
+
18
+ Rake::TestTask.new(:test_worker) do |test|
19
+ test.libs << 'test'
20
+ #SO MUCH NOISE
21
+ #test.warning = true
22
+ test.pattern = 'spec/worker_spec.rb'
23
+ end
24
+
25
+ Rake::TestTask.new(:test_command) do |test|
26
+ test.libs << 'test'
27
+ #SO MUCH NOISE
28
+ #test.warning = true
29
+ test.pattern = 'spec/command_spec.rb'
30
+ end
@@ -13,16 +13,18 @@ Gem::Specification.new do |s|
13
13
  s.homepage = ""
14
14
  s.license = "MIT"
15
15
 
16
- s.files = `git ls-files`.split($/)
16
+ s.files = `git ls-files | grep -Ev '^(testapp)'`.split("\n")
17
17
  s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_dependency 'delayed_job'
22
- s.add_dependency 'celluloid'
21
+ s.add_dependency 'delayed_job', ">= 4.0.0"
22
+ s.add_dependency 'celluloid', ">= 0.16.0"
23
23
 
24
24
  s.add_development_dependency "bundler", "~> 1.3"
25
25
  s.add_development_dependency "rake"
26
26
  s.add_development_dependency "sqlite3"
27
- s.add_development_dependency "delayed_job_active_record"
27
+ s.add_development_dependency "delayed_job_active_record", ">= 4.0.0"
28
+ s.add_development_dependency "rails", "~> 4.1.0"
29
+ s.add_development_dependency "minitest", "~> 5.5.0"
28
30
  end
@@ -1,7 +1,7 @@
1
1
  $stdout.sync = true
2
2
 
3
3
  require 'optparse'
4
- require 'celluloid/autostart'
4
+ require 'celluloid'
5
5
 
6
6
  module DelayedJobCelluloid
7
7
 
@@ -11,32 +11,114 @@ module DelayedJobCelluloid
11
11
 
12
12
  attr_accessor :worker_count
13
13
 
14
+ def logger
15
+ DelayedJobCelluloid.logger
16
+ end
17
+
14
18
  def initialize(args)
15
19
  parse_options(args)
16
20
  end
17
-
21
+
22
+ def daemonize
23
+ begin
24
+ require 'daemons'
25
+ dir = @options[:pid_dir]
26
+ Dir.mkdir(dir) unless File.exist?(dir)
27
+
28
+ before_fork
29
+ Daemons.run_proc('delayed_job_celluloid', :dir => @options[:pid_dir], :dir_mode => :normal, :monitor => @monitor, :ARGV => @args) do |*_args|
30
+ Celluloid.register_shutdown
31
+ Celluloid.start
32
+ launch_celluloid(false)
33
+ end
34
+
35
+ rescue LoadError
36
+ raise "You need to add gem 'daemons' to your Gemfile if you wish to daemonize delayed_job_celluloid."
37
+ end
38
+ end
39
+
40
+ def before_fork
41
+ @files_to_reopen = []
42
+ ObjectSpace.each_object(File) do |file|
43
+ @files_to_reopen << file unless file.closed?
44
+ end
45
+ end
46
+
47
+ def after_fork
48
+ @files_to_reopen.each do |file|
49
+ begin
50
+ file.reopen file.path, "a+"
51
+ file.sync = true
52
+ rescue ::Exception
53
+ end
54
+ end
55
+ end
56
+
57
+ # Run Celluloid in the foreground
18
58
  def run
19
- self_read, self_write = IO.pipe
59
+
60
+ # Run in the background if daemonizing
61
+ (daemonize; return) if @options[:daemonize]
62
+
63
+ # Otherwise, run in the foreground
64
+ launch_celluloid(true)
65
+ end
66
+
67
+ def launch_celluloid(in_foreground = true)
20
68
 
21
- %w(INT TERM).each do |sig|
22
- trap sig do
23
- self_write.puts(sig)
69
+ if in_foreground
70
+ Celluloid.start
71
+ self_read, self_write = IO.pipe
72
+ %w(INT TERM).each do |sig|
73
+ trap sig do
74
+ self_write.puts(sig)
75
+ end
24
76
  end
25
77
  end
26
-
78
+
27
79
  require 'delayed_job_celluloid/launcher'
28
80
  @launcher = Launcher.new(@options, @worker_count)
29
-
81
+
82
+ unless in_foreground
83
+ after_fork
84
+ log_file = @options[:log_file] ||= 'delayed_job_celluloid.log'
85
+ DelayedJobCelluloid.logger = Logger.new(File.join(Rails.root, 'log', log_file))
86
+ DelayedJobCelluloid.logger.formatter = proc do |severity, datetime, progname, msg|
87
+ "#{datetime}: #{msg}\n"
88
+ end
89
+ Delayed::Worker.logger ||= Logger.new(File.join(Rails.root, 'log', 'delayed_job.log'))
90
+ DelayedJobCelluloid.logger.info 'delayed_job_celluloid daemon started'
91
+
92
+ # Daemonized - wait to receive a signal
93
+ %w(INT TERM).each do |sig|
94
+ trap sig do
95
+ handle_signal(sig)
96
+ end
97
+ end
98
+ end
99
+
30
100
  begin
31
101
  @launcher.run
32
-
33
- while readable_io = IO.select([self_read])
34
- signal = readable_io.first[0].gets.strip
35
- handle_signal(signal)
102
+
103
+ if in_foreground
104
+ while readable_io = IO.select([self_read])
105
+ signal = readable_io.first[0].gets.strip
106
+ handle_signal(signal)
107
+ end
108
+ else
109
+ # Sleep for a bit
110
+ while true
111
+ sleep 60
112
+ end
36
113
  end
37
114
  rescue Interrupt
115
+ logger.info 'Shutting down delayed_job_celluloid'
38
116
  @launcher.stop
39
117
  exit(0)
118
+
119
+ rescue => e
120
+ DelayedJobCelluloid.logger.error "Exception: #{e.message}"
121
+ DelayedJobCelluloid.logger.info Kernel.caller
40
122
  end
41
123
  end
42
124
 
@@ -45,16 +127,17 @@ module DelayedJobCelluloid
45
127
  when 'INT','TERM'
46
128
  raise Interrupt
47
129
  end
48
-
49
130
  end
50
131
 
51
132
  def parse_options(args)
52
133
  @options = {
53
134
  :quiet => true,
54
- :timeout => 8
135
+ :timeout => 8,
136
+ :pid_dir => "#{Rails.root}/tmp/pids"
55
137
  }
56
138
 
57
139
  @worker_count = 2
140
+ @monitor = false
58
141
 
59
142
  opts = OptionParser.new do |opts|
60
143
  opts.banner = "Usage: #{File.basename($0)} [options] start|stop|restart|run"
@@ -90,12 +173,27 @@ module DelayedJobCelluloid
90
173
  opts.on('--queue=queue', "Specify which queue DJ must look up for jobs") do |queue|
91
174
  @options[:queues] = queue.split(',')
92
175
  end
176
+ opts.on('--pool=queue1[,queue2][:worker_count]', 'Specify queues and number of workers for a worker pool') do |pool|
177
+ parse_worker_pool(pool)
178
+ end
93
179
  opts.on('--exit-on-complete', "Exit when no more jobs are available to run. This will exit if all jobs are scheduled to run in the future.") do
94
180
  @options[:exit_on_complete] = true
95
181
  end
96
182
  opts.on('-t', '--timeout NUM', "Shutdown timeout") do |prefix|
97
183
  @options[:timeout] = Integer(arg)
98
184
  end
185
+ opts.on('-d', '--daemonize', "Daemonize process") do
186
+ @options[:daemonize] = true
187
+ end
188
+ opts.on('-L', '--log FILE', "Name of log file") do |log_file|
189
+ @options[:log_file] = log_file
190
+ end
191
+ opts.on('-m', '--monitor', 'Start monitor process.') do
192
+ @monitor = true
193
+ end
194
+ opts.on('--pid-dir=DIR', 'Specifies an alternate directory in which to store the process ids.') do |dir|
195
+ @options[:pid_dir] = dir
196
+ end
99
197
  end
100
198
  @args = opts.parse!(args)
101
199
  end
@@ -9,6 +9,7 @@ module DelayedJobCelluloid
9
9
  end
10
10
 
11
11
  def run
12
+ DelayedJobCelluloid.logger.info 'Launching delayed_job_celluloid'
12
13
  manager.async.start
13
14
  end
14
15
 
@@ -29,6 +29,7 @@ module DelayedJobCelluloid
29
29
  def start
30
30
  @ready.each_with_index do |worker, index|
31
31
  worker.name = "delayed_job.#{index}"
32
+ DelayedJobCelluloid.logger.info "Starting worker #{worker.name}"
32
33
  worker.async.start
33
34
  end
34
35
  end
@@ -90,14 +91,6 @@ module DelayedJobCelluloid
90
91
  # They must die but their messages shall live on.
91
92
  info "Still waiting for #{@busy.size} busy workers"
92
93
 
93
- # Re-enqueue terminated jobs
94
- # NOTE: You may notice that we may push a job back to redis before
95
- # the worker thread is terminated. This is ok because Sidekiq's
96
- # contract says that jobs are run AT LEAST once. Process termination
97
- # is delayed until we're certain the jobs are back in Redis because
98
- # it is worse to lose a job than to run it twice.
99
- #Sidekiq::Fetcher.strategy.bulk_requeue(@in_progress.values)
100
-
101
94
  debug "Terminating #{@busy.size} busy worker threads"
102
95
  @busy.each do |worker|
103
96
  if worker.alive? && t = @threads.delete(worker.object_id)
@@ -1,3 +1,3 @@
1
1
  module DelayedJobCelluloid
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,5 +1,4 @@
1
1
  require 'delayed_job'
2
- require 'delayed/performable_mailer'
3
2
 
4
3
  module DelayedJobCelluloid
5
4
  class Worker < Delayed::Worker
@@ -1,9 +1,9 @@
1
1
  require_relative 'spec_helper'
2
2
  require_relative 'test_job'
3
3
 
4
- class CommandSpec < Minitest::Unit::TestCase
4
+ class CommandSpec < Minitest::Test
5
5
  describe 'command' do
6
-
6
+
7
7
  it "starts workers" do
8
8
  i = 0
9
9
  while i < 10 do
data/spec/database.yml CHANGED
@@ -1,3 +1,4 @@
1
1
  test:
2
2
  adapter: sqlite3
3
- database: "spec/db/test.sqlite3"
3
+ database: "spec/db/test.sqlite3"
4
+ pool: 10
@@ -1,7 +1,7 @@
1
1
  require_relative 'spec_helper'
2
2
  require_relative 'test_job'
3
3
 
4
- class LauncherSpec < Minitest::Unit::TestCase
4
+ class LauncherSpec < Minitest::Test
5
5
  describe 'launcher' do
6
6
 
7
7
  it "starts working jobs" do
data/spec/manager_spec.rb CHANGED
@@ -1,8 +1,12 @@
1
1
  require_relative 'spec_helper'
2
2
 
3
- class ManagerSpec < Minitest::Unit::TestCase
3
+ class ManagerSpec < Minitest::Test
4
4
  describe 'manager' do
5
5
 
6
+ before :all do
7
+ DelayedJobCelluloid::Worker.exit_on_complete = true
8
+ end
9
+
6
10
  it "creates N worker instances" do
7
11
  mgr = DelayedJobCelluloid::Manager.new({}, 3)
8
12
  assert_equal mgr.ready.size, 3
@@ -79,8 +83,9 @@ class ManagerSpec < Minitest::Unit::TestCase
79
83
 
80
84
  mgr.worker_died(worker, "test")
81
85
 
82
- assert_equal 0, mgr.ready.size
83
- assert_equal 1, mgr.busy.size
86
+ assert_equal false, mgr.stopped?
87
+ assert_equal 1, mgr.ready.size
88
+ assert_equal 0, mgr.busy.size
84
89
  worker.verify
85
90
  end
86
91
 
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,11 @@ require 'delayed_job_active_record'
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/spec'
6
6
  require 'minitest/pride'
7
- require 'rails'
8
7
  require 'active_record'
9
8
  require 'sqlite3'
10
9
  require 'logger'
11
10
  require 'celluloid/autostart'
11
+ require 'rails'
12
12
 
13
13
  ROOT = File.join(File.dirname(__FILE__), '..')
14
14
  RAILS_ROOT = ROOT
data/spec/worker_spec.rb CHANGED
@@ -3,8 +3,8 @@ require_relative 'test_job'
3
3
 
4
4
  DelayedJobCelluloid::Worker.backend = :active_record
5
5
 
6
- class WorkerSpec < Minitest::Unit::TestCase
7
-
6
+ class WorkerSpec < Minitest::Test
7
+
8
8
  describe "Worker" do
9
9
 
10
10
  before :all do
@@ -12,27 +12,27 @@ class WorkerSpec < Minitest::Unit::TestCase
12
12
  end
13
13
 
14
14
  it "runs jobs" do
15
-
15
+
16
16
  manager = Minitest::Mock.new
17
17
  async = Minitest::Mock.new
18
- 100.times {async.expect(:work, nil, [Celluloid::ActorProxy])}
19
- 100.times {async.expect(:worker_done, nil, [Celluloid::ActorProxy])}
18
+ 100.times {async.expect(:work, nil, [DelayedJobCelluloid::Worker])}
19
+ 100.times {async.expect(:worker_done, nil, [DelayedJobCelluloid::Worker])}
20
20
  async.expect(:real_thread, async, [nil, Thread])
21
21
  100.times {manager.expect(:async, async, [])}
22
-
23
-
22
+
23
+
24
24
  worker = DelayedJobCelluloid::Worker.new({},manager)
25
25
  test = TestJob.new
26
26
  test.delay.test_this
27
-
27
+
28
28
  assert_equal 1, Delayed::Job.count
29
-
29
+
30
30
  worker.start
31
31
 
32
32
  assert_equal 0, Delayed::Job.count
33
33
  manager.verify
34
34
  async.verify
35
35
  end
36
-
36
+
37
37
  end
38
38
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_celluloid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Mooney
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-01 00:00:00.000000000 Z
11
+ date: 2014-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: delayed_job
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ! '>='
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: celluloid
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.16.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.16.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -56,44 +56,72 @@ dependencies:
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ! '>='
59
+ - - '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ! '>='
66
+ - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ! '>='
73
+ - - '>='
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ! '>='
80
+ - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: delayed_job_active_record
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ! '>='
87
+ - - '>='
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: 4.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ! '>='
94
+ - - '>='
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: 4.0.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: rails
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 4.1.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 4.1.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 5.5.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 5.5.0
97
125
  description: run delayed_job workers in multiple threads within a single process
98
126
  email:
99
127
  - tmooney3979@gmail.com
@@ -115,7 +143,7 @@ files:
115
143
  - lib/delayed_job_celluloid/worker.rb
116
144
  - lib/generators/delayed_job_celluloid/delayed_job_celluloid_generator.rb
117
145
  - lib/generators/delayed_job_celluloid/templates/script
118
- - spec/command_test.rb
146
+ - spec/command_spec.rb
119
147
  - spec/database.yml
120
148
  - spec/launcher_spec.rb
121
149
  - spec/manager_spec.rb
@@ -132,22 +160,22 @@ require_paths:
132
160
  - lib
133
161
  required_ruby_version: !ruby/object:Gem::Requirement
134
162
  requirements:
135
- - - ! '>='
163
+ - - '>='
136
164
  - !ruby/object:Gem::Version
137
165
  version: '0'
138
166
  required_rubygems_version: !ruby/object:Gem::Requirement
139
167
  requirements:
140
- - - ! '>='
168
+ - - '>='
141
169
  - !ruby/object:Gem::Version
142
170
  version: '0'
143
171
  requirements: []
144
172
  rubyforge_project:
145
- rubygems_version: 2.0.7
173
+ rubygems_version: 2.1.11
146
174
  signing_key:
147
175
  specification_version: 4
148
176
  summary: multi-threaded delayed_job workers!
149
177
  test_files:
150
- - spec/command_test.rb
178
+ - spec/command_spec.rb
151
179
  - spec/database.yml
152
180
  - spec/launcher_spec.rb
153
181
  - spec/manager_spec.rb