guard-resque 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,4 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
- .rvmrc
5
+ .rvmrc
6
+ .rbx
@@ -1,4 +1,11 @@
1
- ## 0.0.1
1
+ ## 0.0.4
2
+
3
+ * Add a :vverbose option to distinguish from the :verbose option
4
+ * Add a timeout when killing Resque, to force it with SIGKILL
5
+ * Change the way the #spawn call is made, so it doesn't create a subshell to launch
6
+ Resque, which was causing issue #2
7
+
8
+ ## 0.0.3
2
9
 
3
10
  * Forked from guard-delayed and started guard-resque
4
11
 
@@ -9,7 +16,7 @@
9
16
 
10
17
  * Fixed options for current delayed_job version (from dbloete)
11
18
  * Environment settings needed to be passed in via RAILS_ENV=
12
-
19
+
13
20
  ## 0.0.9 (2011-06-22)
14
21
 
15
22
  * Fixed argument passing to the start script
@@ -32,18 +32,19 @@ being active.
32
32
  guard 'resque', :environment => 'development' do
33
33
  watch(%r{^app/(.+)\.rb})
34
34
  end
35
-
35
+
36
36
  ## Options
37
37
 
38
38
  You can customize the resque task via the following options:
39
39
 
40
- * `environment`: the rails environment to run the workers in (defaults to `"development"`)
40
+ * `environment`: the rails environment to run the workers in (defaults to `nil`)
41
41
  * `task`: the name of the rake task to use (defaults to `"resque:work"`)
42
42
  * `queue`: the resque queue to run (defaults to `"*"`)
43
- * `count`: the number of workers to include (defaults to `"1"`)
44
- * `verbose`: whether to use verbose logging (defaults to `false`)
45
- * `trace`: whether to include `--trace` on the rake command (defaults to `false`)
46
- * `stop_signal`: how to kill the process when restarting (defaults to `KILL`)
43
+ * `count`: the number of workers to include (defaults to `1`)
44
+ * `verbose`: whether to use verbose logging (defaults to `nil`)
45
+ * `vverbose`: whether to use very verbose logging (defaults to `nil`)
46
+ * `trace`: whether to include `--trace` on the rake command (defaults to `nil`)
47
+ * `stop_signal`: how to kill the process when restarting (defaults to `QUIT`)
47
48
 
48
49
 
49
50
  ## Development
@@ -63,13 +64,13 @@ you make.
63
64
  * Update the version number in `lib/guard/resque/version.rb`
64
65
  * Update `CHANGELOG.md`
65
66
  * Build the gem:
66
-
67
+
67
68
  gem build guard-resque.gemspec
68
-
69
+
69
70
  * Push to rubygems.org:
70
-
71
+
71
72
  gem push guard-resque-0.x.x.gem
72
-
73
+
73
74
 
74
75
  ## Guard::Delayed Authors
75
76
 
data/Rakefile CHANGED
@@ -5,28 +5,29 @@ require 'rspec/core/rake_task'
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  task :default => :spec
7
7
 
8
- namespace(:spec) do
8
+ namespace :spec do
9
9
  desc "Run all specs on multiple ruby versions (requires rvm)"
10
- task(:portability) do
11
- rubies = if ENV['RUBIES']
12
- ENV['RUBIES'].split(' ')
13
- else
14
- %w[1.8.7 1.9.2 ree jruby]
15
- end
16
- rubies.each do |version|
17
- rvm_ruby = if ENV['GEMSET']
18
- "#{version}@#{ENV['GEMSET']}"
19
- else
20
- version
21
- end
22
- system <<-BASH
23
- bash -c '
24
- source ~/.rvm/scripts/rvm;
25
- rvm #{rvm_ruby};
26
- echo "--------- version #{rvm_ruby} ----------\n";
27
- bundle install;
28
- rake spec'
10
+ task :portability do
11
+
12
+ command = <<-BASH
13
+ source ~/.rvm/scripts/rvm;
14
+ rvm #{ENV['RUBIES'] || 'all'} do bundle exec rake spec
15
+ BASH
16
+ system "bash -c '#{command}'"
17
+
18
+ end
19
+
20
+ namespace :portability do
21
+ desc 'Installs bundler/rake and runs bundle install for all rubies'
22
+ task :prepare do
23
+ # FIXME: This isn't working for me when it gets to JRuby, specs are running fine - RL
24
+ command = <<-BASH
25
+ source ~/.rvm/scripts/rvm;
26
+ rvm #{ENV['RUBIES'] || 'all'} do gem install bundler rake;
27
+ rvm #{ENV['RUBIES'] || 'all'} do bundle install
29
28
  BASH
29
+
30
+ system "bash -c '#{command}'"
30
31
  end
31
32
  end
32
33
  end
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "guard-resque"
7
7
  s.version = Guard::ResqueVersion::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Jacques Crocker", "David Parry"]
10
- s.email = ["railsjedi@gmail.com"]
9
+ s.authors = ["Jacques Crocker", "Ryan Long", "David Parry"]
10
+ s.email = ["railsjedi@gmail.com", 'ryan@rtlong.com']
11
11
  s.homepage = 'http://github.com/railsjedi/guard-resque'
12
12
  s.summary = %q{guard gem for resque}
13
13
  s.description = %q{Guard::Resque automatically starts/stops/restarts resque worker}
@@ -18,7 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.add_dependency 'guard', '>= 0.8'
19
19
  s.add_dependency 'resque'
20
20
 
21
- s.add_development_dependency 'bundler', '~> 1.0.10'
21
+ s.add_development_dependency 'bundler'
22
+ s.add_development_dependency 'rake'
22
23
  s.add_development_dependency 'rspec', '~> 2.5.0'
23
24
  s.add_development_dependency 'guard-rspec', '>= 0.2.0'
24
25
  s.add_development_dependency 'guard-bundler', '>= 0.1.1'
@@ -4,48 +4,68 @@ require 'guard/guard'
4
4
  module Guard
5
5
  class Resque < Guard
6
6
 
7
+ DEFAULT_SIGNAL = :QUIT
8
+ DEFAULT_QUEUE = '*'.freeze
9
+ DEFAULT_COUNT = 1
10
+ DEFAULT_TASK_SINGLE = 'resque:work'.freeze
11
+ DEFAULT_TASK_MULTIPLE = 'resque:workers'.freeze
12
+
7
13
  # Allowable options are:
8
- # :environment e.g. 'test'
9
- # :task .e.g 'resque:work'
10
- # :queue e.g. '*'
11
- # :count e.g. 3
12
- # :verbose e.g. true
13
- # :trace e.g. true
14
- # :stop_signal e.g. KILL
14
+ # - :environment e.g. 'test'
15
+ # - :task .e.g 'resque:work'
16
+ # - :queue e.g. '*'
17
+ # - :count e.g. 3
18
+ # - :verbose e.g. true
19
+ # - :vverbose e.g. true
20
+ # - :trace e.g. true
21
+ # - :stop_signal e.g. :QUIT or :SIGQUIT
15
22
  def initialize(watchers = [], options = {})
16
23
  @options = options
17
24
  @pid = nil
18
- @stop_signal = options[:stop_signal] || "KILL"
25
+ @stop_signal = options[:stop_signal] || DEFAULT_SIGNAL
26
+ @options[:queue] ||= DEFAULT_QUEUE
27
+ @options[:count] ||= DEFAULT_COUNT
28
+ @options[:task] ||= (@options[:count].to_i == 1) ? DEFAULT_TASK_SINGLE : DEFAULT_TASK_MULTIPLE
19
29
  super
20
30
  end
21
31
 
22
32
  def start
23
33
  stop
24
- UI.info "Starting up resque..."
25
- UI.info cmd
26
- @pid = spawn(cmd)
34
+ UI.info 'Starting up resque...'
35
+ UI.info [ cmd, env.map{|v| v.join('=')} ].join(' ')
36
+
37
+ # launch Resque worker
38
+ @pid = spawn(env, cmd)
27
39
  end
28
40
 
29
- # Called on Ctrl-C signal (when Guard quits)
30
41
  def stop
31
42
  if @pid
32
- UI.info("Stopping resque...")
33
- ::Process.kill(@stop_signal, @pid)
34
- ::Process.waitpid(@pid) rescue Errno::ESRCH
35
- @pid = nil
36
- UI.info("Stopped process resque")
43
+ UI.info 'Stopping resque...'
44
+ ::Process.kill @stop_signal, @pid
45
+ begin
46
+ Timeout.timeout(15) do
47
+ ::Process.wait @pid
48
+ end
49
+ rescue Timeout::Error
50
+ UI.info 'Sending SIGKILL to resque, as it\'s taking too long to shutdown.'
51
+ ::Process.kill :KILL, @pid
52
+ ::Process.wait @pid
53
+ end
54
+ UI.info 'Stopped process resque'
37
55
  end
56
+ rescue Errno::ESRCH
57
+ UI.info 'Guard::Resque lost the Resque worker subprocess!'
58
+ ensure
59
+ @pid = nil
38
60
  end
39
61
 
40
62
  # Called on Ctrl-Z signal
41
- # This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
42
63
  def reload
43
- UI.info "Restarting resque..."
64
+ UI.info 'Restarting resque...'
44
65
  restart
45
66
  end
46
67
 
47
68
  # Called on Ctrl-/ signal
48
- # This method should be principally used for long action like running all specs/tests/...
49
69
  def run_all
50
70
  true
51
71
  end
@@ -63,27 +83,25 @@ module Guard
63
83
  private
64
84
 
65
85
  def cmd
66
- command = "bundle exec rake "
67
-
68
- # environment setting
69
- command << "RAILS_ENV=#{@options[:environment]} " if @options[:environment]
86
+ command = ['bundle exec rake', @options[:task].to_s]
70
87
 
71
- # queue setting
72
- command << "QUEUE=#{@options[:queue] || '*'} "
88
+ # trace setting
89
+ command << '--trace' if @options[:trace]
73
90
 
74
- #count setting
75
- command << "COUNT=#{@options[:count] || '1'} "
91
+ return command.join(' ')
92
+ end
76
93
 
77
- # verbose setting
78
- command << "VVERBOSE=1 " if @options[:verbose]
94
+ def env
95
+ var = Hash.new
79
96
 
80
- # task setting
81
- command << "#{@options[:task] || 'resque:work'} "
97
+ var['QUEUE'] = @options[:queue].to_s if @options[:queue]
98
+ var['COUNT'] = @options[:count].to_s if @options[:count]
99
+ var['RAILS_ENV'] = @options[:environment].to_s if @options[:environment]
82
100
 
83
- # trace setting
84
- command << "--trace " if @options[:trace]
101
+ var['VERBOSE'] = '1' if @options[:verbose]
102
+ var['VVERBOSE'] = '1' if @options[:vverbose]
85
103
 
86
- command
104
+ return var
87
105
  end
88
106
  end
89
107
  end
@@ -1,10 +1,12 @@
1
- # other available options
2
- # :task (defaults to resque:work)
3
- # :verbose
4
- # :trace
5
- # :queue (defaults to "*")
6
- # :count (defaults to 1)
1
+ ### Guard::Resque
2
+ # available options:
3
+ # - :task (defaults to 'resque:work' if :count is 1; 'resque:workers', otherwise)
4
+ # - :verbose / :vverbose (set them to anything but false to activate their respective modes)
5
+ # - :trace
6
+ # - :queue (defaults to "*")
7
+ # - :count (defaults to 1)
8
+ # - :environment (corresponds to RAILS_ENV for the Resque worker)
7
9
  guard 'resque', :environment => 'development' do
8
- watch(%r{^app/(.+)\.rb})
9
- watch(%r{^lib/(.+)\.rb})
10
+ watch(%r{^app/(.+)\.rb$})
11
+ watch(%r{^lib/(.+)\.rb$})
10
12
  end
@@ -1,5 +1,5 @@
1
1
  module Guard
2
2
  module ResqueVersion
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -1,51 +1,67 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Guard::Resque do
4
- subject { Guard::Resque.new }
4
+ describe 'start' do
5
5
 
6
- describe "start" do
7
- before do
8
- subject = Guard::Resque.new
9
- end
6
+ it 'should accept :environment option' do
7
+ environment = :foo
10
8
 
11
- after do
12
- subject.stop
9
+ obj = Guard::Resque.new [], :environment => environment
10
+ obj.send(:env).should include 'RAILS_ENV' => environment.to_s
13
11
  end
14
12
 
15
- it "should create a pid in /tmp/pids" do
16
- subject.start
17
- Dir.glob("tmp/pids/resque*.pid").should_not be_empty
18
- end
13
+ it 'should accept :queue option' do
14
+ queue = :foo
19
15
 
20
- it "should accept environment option" do
21
- obj = Guard::Resque.new [], :environment => 'foo'
22
- obj.send(:cmd).should match /RAILS_ENV=foo/
16
+ obj = Guard::Resque.new [], :queue => queue
17
+ obj.send(:env).should include 'QUEUE' => queue.to_s
23
18
  end
24
19
 
25
- it "should accept queue option" do
26
- obj = Guard::Resque.new [], :queue => 'foo'
27
- obj.send(:cmd).should match /QUEUE=foo/
20
+ it 'should accept :count option' do
21
+ count = 2
22
+
23
+ obj = Guard::Resque.new [], :count => count
24
+ obj.send(:env).should include 'COUNT' => count.to_s
28
25
  end
29
26
 
30
- it "should accept count option" do
31
- obj = Guard::Resque.new [], :count => 2
32
- obj.send(:cmd).should match /COUNT=2/
27
+ it 'should accept :vverbose option' do
28
+ obj = Guard::Resque.new [], :vverbose => true
29
+ obj.send(:env).should include 'VVERBOSE'
33
30
  end
34
31
 
35
- it "should accept verbose option" do
32
+ it 'should accept :verbose option' do
36
33
  obj = Guard::Resque.new [], :verbose => true
37
- obj.send(:cmd).should match /VVERBOSE=1/
34
+ obj.send(:env).should include 'VERBOSE'
38
35
  end
39
36
 
40
- it "should accept trace option" do
37
+ it 'should accept :trace option' do
41
38
  obj = Guard::Resque.new [], :trace => true
42
- obj.send(:cmd).should match /--trace/
39
+ obj.send(:cmd).should include '--trace'
40
+ end
41
+
42
+ it 'should accept :task option' do
43
+ task = 'environment foo'
44
+
45
+ obj = Guard::Resque.new [], :task => task
46
+ obj.send(:cmd).should include task
47
+ obj.send(:cmd).should_not include Guard::Resque::DEFAULT_TASK_SINGLE
43
48
  end
44
49
 
45
- it "should accept task option" do
46
- obj = Guard::Resque.new [], :task => 'environment foo'
47
- obj.send(:cmd).should match /environment foo/
48
- obj.send(:cmd).should_not match /resque:work/
50
+ it 'should provide default options' do
51
+ obj = Guard::Resque.new []
52
+ obj.send(:env).should include 'QUEUE' => Guard::Resque::DEFAULT_QUEUE.to_s
53
+ obj.send(:env).should include 'COUNT' => Guard::Resque::DEFAULT_COUNT.to_s
54
+ obj.send(:cmd).should include Guard::Resque::DEFAULT_TASK_SINGLE
49
55
  end
56
+
57
+ it 'should provide different default options when :count is multiple' do
58
+ count = 2
59
+
60
+ obj = Guard::Resque.new [], :count => count
61
+ obj.send(:env).should include 'QUEUE' => Guard::Resque::DEFAULT_QUEUE.to_s
62
+ obj.send(:env).should include 'COUNT' => count.to_s
63
+ obj.send(:cmd).should include Guard::Resque::DEFAULT_TASK_MULTIPLE
64
+ end
65
+
50
66
  end
51
67
  end
@@ -1,7 +1,7 @@
1
1
  require 'rspec'
2
2
  require 'guard/resque'
3
3
 
4
- ENV["GUARD_ENV"] = 'test'
4
+ ENV['GUARD_ENV'] = 'test'
5
5
 
6
6
  RSpec.configure do |config|
7
7
  config.color_enabled = true
metadata CHANGED
@@ -1,20 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guard-resque
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jacques Crocker
9
+ - Ryan Long
9
10
  - David Parry
10
11
  autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2011-10-05 00:00:00.000000000Z
14
+ date: 2012-02-20 00:00:00.000000000 Z
14
15
  dependencies:
15
16
  - !ruby/object:Gem::Dependency
16
17
  name: guard
17
- requirement: &2153606040 !ruby/object:Gem::Requirement
18
+ requirement: &9480740 !ruby/object:Gem::Requirement
18
19
  none: false
19
20
  requirements:
20
21
  - - ! '>='
@@ -22,10 +23,10 @@ dependencies:
22
23
  version: '0.8'
23
24
  type: :runtime
24
25
  prerelease: false
25
- version_requirements: *2153606040
26
+ version_requirements: *9480740
26
27
  - !ruby/object:Gem::Dependency
27
28
  name: resque
28
- requirement: &2153605480 !ruby/object:Gem::Requirement
29
+ requirement: &9480060 !ruby/object:Gem::Requirement
29
30
  none: false
30
31
  requirements:
31
32
  - - ! '>='
@@ -33,21 +34,32 @@ dependencies:
33
34
  version: '0'
34
35
  type: :runtime
35
36
  prerelease: false
36
- version_requirements: *2153605480
37
+ version_requirements: *9480060
37
38
  - !ruby/object:Gem::Dependency
38
39
  name: bundler
39
- requirement: &2153604860 !ruby/object:Gem::Requirement
40
+ requirement: &9478340 !ruby/object:Gem::Requirement
40
41
  none: false
41
42
  requirements:
42
- - - ~>
43
+ - - ! '>='
43
44
  - !ruby/object:Gem::Version
44
- version: 1.0.10
45
+ version: '0'
45
46
  type: :development
46
47
  prerelease: false
47
- version_requirements: *2153604860
48
+ version_requirements: *9478340
49
+ - !ruby/object:Gem::Dependency
50
+ name: rake
51
+ requirement: &9477480 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *9477480
48
60
  - !ruby/object:Gem::Dependency
49
61
  name: rspec
50
- requirement: &2153604360 !ruby/object:Gem::Requirement
62
+ requirement: &9493020 !ruby/object:Gem::Requirement
51
63
  none: false
52
64
  requirements:
53
65
  - - ~>
@@ -55,10 +67,10 @@ dependencies:
55
67
  version: 2.5.0
56
68
  type: :development
57
69
  prerelease: false
58
- version_requirements: *2153604360
70
+ version_requirements: *9493020
59
71
  - !ruby/object:Gem::Dependency
60
72
  name: guard-rspec
61
- requirement: &2153603900 !ruby/object:Gem::Requirement
73
+ requirement: &9492080 !ruby/object:Gem::Requirement
62
74
  none: false
63
75
  requirements:
64
76
  - - ! '>='
@@ -66,10 +78,10 @@ dependencies:
66
78
  version: 0.2.0
67
79
  type: :development
68
80
  prerelease: false
69
- version_requirements: *2153603900
81
+ version_requirements: *9492080
70
82
  - !ruby/object:Gem::Dependency
71
83
  name: guard-bundler
72
- requirement: &2153603440 !ruby/object:Gem::Requirement
84
+ requirement: &9491100 !ruby/object:Gem::Requirement
73
85
  none: false
74
86
  requirements:
75
87
  - - ! '>='
@@ -77,10 +89,11 @@ dependencies:
77
89
  version: 0.1.1
78
90
  type: :development
79
91
  prerelease: false
80
- version_requirements: *2153603440
92
+ version_requirements: *9491100
81
93
  description: Guard::Resque automatically starts/stops/restarts resque worker
82
94
  email:
83
95
  - railsjedi@gmail.com
96
+ - ryan@rtlong.com
84
97
  executables: []
85
98
  extensions: []
86
99
  extra_rdoc_files: []
@@ -118,10 +131,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
131
  version: 1.3.6
119
132
  requirements: []
120
133
  rubyforge_project: guard-resque
121
- rubygems_version: 1.8.10
134
+ rubygems_version: 1.8.15
122
135
  signing_key:
123
136
  specification_version: 3
124
137
  summary: guard gem for resque
125
- test_files:
126
- - spec/guard/resque_spec.rb
127
- - spec/spec_helper.rb
138
+ test_files: []
139
+ has_rdoc: