scheduler_daemon 1.1.3 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +0 -5
- data/Gemfile.lock +31 -19
- data/README.markdown +96 -79
- data/Rakefile +13 -11
- data/VERSION +1 -1
- data/bin/scheduler_daemon +6 -2
- data/lib/scheduler_daemon/base.rb +5 -4
- data/lib/scheduler_daemon/scheduler_task.rb +3 -3
- data/scheduler_daemon.gemspec +9 -21
- data/spec/command_line_args_to_hash_spec.rb +2 -2
- data/spec/scheduled_tasks/session_cleaner_task_spec.rb +2 -2
- data/spec/scheduler_spec.rb +1 -1
- metadata +30 -109
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 890009567ec01090073f904f667bc6a367617c0255f5edabb8a491c99d4044a2
|
4
|
+
data.tar.gz: 854decf91b48d1d3d039c0242e3332252e98c935ec77515aa487ca67a8972226
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 398d7780674d8abf32cc926d761b1ddfa93b1b0d072b79e61cd831f03992fae3d367d9a7953ce96031d125cc930ceeb40818fe2abfa3008cd21b63e35e880d7f
|
7
|
+
data.tar.gz: 330ae547ba14f48fdbb87fa6a0600edd1a9c5869eb980039a9cf0d9e918dc8b2899b1a9186717fed79f8024b83d27efd4e81a950257d2e5e04f1227b66e50968
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,36 +1,48 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
scheduler_daemon (1.1.
|
4
|
+
scheduler_daemon (1.1.5)
|
5
5
|
activesupport
|
6
6
|
chronic (>= 0.2.0)
|
7
|
-
chronic (>= 0.2.0)
|
8
|
-
daemons (>= 1.0.10)
|
9
7
|
daemons (>= 1.0.10)
|
10
8
|
eventmachine (>= 0.12.8)
|
11
|
-
|
12
|
-
rufus-scheduler (>= 2.0.1)
|
13
|
-
rufus-scheduler (>= 2.0.1)
|
14
|
-
scheduler_daemon
|
9
|
+
rufus-scheduler (~> 2.0.24)
|
15
10
|
|
16
11
|
GEM
|
17
12
|
remote: http://rubygems.org/
|
18
13
|
specs:
|
19
|
-
activesupport (
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
activesupport (7.0.4.2)
|
15
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
i18n (>= 1.6, < 2)
|
17
|
+
minitest (>= 5.1)
|
18
|
+
tzinfo (~> 2.0)
|
19
|
+
chronic (0.10.2)
|
20
|
+
concurrent-ruby (1.2.0)
|
21
|
+
daemons (1.4.1)
|
22
|
+
diff-lcs (1.5.0)
|
23
|
+
eventmachine (1.2.7)
|
24
|
+
i18n (1.12.0)
|
25
|
+
concurrent-ruby (~> 1.0)
|
26
|
+
minitest (5.17.0)
|
27
|
+
rspec (2.13.0)
|
28
|
+
rspec-core (~> 2.13.0)
|
29
|
+
rspec-expectations (~> 2.13.0)
|
30
|
+
rspec-mocks (~> 2.13.0)
|
31
|
+
rspec-core (2.13.1)
|
32
|
+
rspec-expectations (2.13.0)
|
33
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
34
|
+
rspec-mocks (2.13.1)
|
35
|
+
rufus-scheduler (2.0.24)
|
36
|
+
tzinfo (>= 0.3.22)
|
37
|
+
tzinfo (2.0.6)
|
38
|
+
concurrent-ruby (~> 1.0)
|
26
39
|
|
27
40
|
PLATFORMS
|
28
41
|
ruby
|
29
42
|
|
30
43
|
DEPENDENCIES
|
31
|
-
|
32
|
-
chronic (>= 0.2.0)
|
33
|
-
daemons (>= 1.0.10)
|
34
|
-
eventmachine (>= 0.12.8)
|
35
|
-
rufus-scheduler (>= 2.0.1)
|
44
|
+
rspec (~> 2.13.0)
|
36
45
|
scheduler_daemon!
|
46
|
+
|
47
|
+
BUNDLED WITH
|
48
|
+
2.4.3
|
data/README.markdown
CHANGED
@@ -1,146 +1,163 @@
|
|
1
|
-
Scheduler Daemon
|
2
|
-
================
|
1
|
+
# Scheduler Daemon
|
3
2
|
|
4
3
|
Rails 3+ compatible scheduler daemon (see branches for older versions).
|
5
4
|
|
6
|
-
Replaces cron/rake pattern of periodically running rake tasks
|
7
|
-
|
8
|
-
|
5
|
+
Replaces cron/rake pattern of periodically running rake tasks to perform maintenance
|
6
|
+
tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app, and only
|
7
|
+
loads the environment once, no matter how many tasks run.
|
9
8
|
|
10
|
-
What's so great about it?
|
9
|
+
What's so great about it? Well, I'm glad you asked!
|
11
10
|
|
12
11
|
- Only loads your Rails environment once on daemon start, not every time a task is run
|
13
|
-
- Allows you to easily deploy the scheduled tasks with your Rails app instead of depending on an
|
14
|
-
administrator to update crontab
|
12
|
+
- Allows you to easily deploy the scheduled tasks with your Rails app instead of depending on an administrator to update crontab
|
15
13
|
- Can be installed as a gem or a plugin (I suggest gem)
|
16
14
|
- It doesn't use rake or cron!
|
17
15
|
- Gets you up and running with your own daemon in under 2 minutes
|
18
16
|
- Specially designed to work with your rails app!
|
19
17
|
|
20
|
-
Setup
|
21
|
-
=====
|
18
|
+
## Setup
|
22
19
|
|
23
20
|
Install as a gem or plugin.
|
24
21
|
|
25
22
|
As a gem, the old-fashioned way:
|
26
23
|
|
27
|
-
|
24
|
+
```
|
25
|
+
gem install scheduler_daemon
|
26
|
+
```
|
28
27
|
|
29
|
-
As a gem with bundler, add to your
|
28
|
+
As a gem with bundler, add to your `./Gemfile`:
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
```
|
31
|
+
gem 'scheduler_daemon'
|
32
|
+
```
|
34
33
|
|
35
|
-
|
34
|
+
I pretty much assume you chose this option below and prefix most commands with `bundle exec`
|
36
35
|
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
As a plugin (deprecated): (might be awkward to call the binary to start up the daemon...)
|
37
|
+
|
38
|
+
```
|
39
|
+
rails plugin install git://github.com/ssoroka/scheduler_daemon.git
|
40
|
+
# Install required gems
|
41
|
+
gem install daemons rufus-scheduler eventmachine chronic -s http://gemcutter.org
|
42
|
+
```
|
40
43
|
|
41
44
|
Optionally generate the default scheduler daemon task for your rails app:
|
42
45
|
|
43
|
-
|
46
|
+
```
|
47
|
+
rails generate scheduler_task MyNewTask
|
48
|
+
```
|
44
49
|
|
45
|
-
which will create
|
50
|
+
which will create a task named:
|
46
51
|
|
47
|
-
|
52
|
+
```
|
53
|
+
scheduled_tasks/my_new_task.rb
|
54
|
+
```
|
48
55
|
|
49
|
-
Usage
|
50
|
-
=====
|
56
|
+
## Usage
|
51
57
|
|
52
58
|
generate a new scheduled task:
|
53
59
|
|
54
|
-
|
60
|
+
```
|
61
|
+
rails generate scheduler_task MyTaskName
|
62
|
+
```
|
63
|
+
|
64
|
+
If you have problems with that, the template for new tasks is [here](lib/scheduler_daemon/rails/generators/scheduler_task/templates/scheduled_tasks/example_task.rb)
|
55
65
|
|
56
|
-
|
57
|
-
|
58
|
-
lib/scheduler_daemon/rails/generators/scheduler_task/templates/scheduled_tasks/example_task.rb
|
59
|
-
|
60
|
-
you can always copy it and make modifications, or see "Manually create tasks" below.
|
66
|
+
You can always copy it and make modifications, or see [Manually create tasks](#manually-create-tasks)
|
61
67
|
|
62
68
|
Tasks support their own special DSL; commands are:
|
63
69
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
```rb
|
71
|
+
environments :production, :staging # run only in environments listed. (:all by default)
|
72
|
+
every '1d' # run every day
|
73
|
+
every '1d', :first_at => Chronic.parse("2 am") # run every day, starting at 2 am (see caveat below)
|
74
|
+
at Cronic.parse('5 pm') # run *once* at 5 pm today
|
75
|
+
# (relative to scheduler start/restart time )
|
76
|
+
# (happens every time scheduler starts/restarts)
|
77
|
+
# (see caveat below )
|
78
|
+
cron '* 4 * * *' # cron style (run every 4 am)
|
79
|
+
self.in '30s' # run once, 30 seconds from scheduler start/restart
|
80
|
+
# "self." is required--"in" is a keyword
|
81
|
+
```
|
73
82
|
|
74
83
|
fire up the daemon in console mode to test it out
|
75
84
|
|
76
|
-
|
85
|
+
```
|
86
|
+
bundle exec scheduler_daemon run
|
87
|
+
```
|
77
88
|
|
78
|
-
For production environments, add the daemon to the system start-up, and
|
79
|
-
|
89
|
+
For production environments, add the daemon to the system start-up, and capistrano
|
90
|
+
deploy scripts, etc. Something like:
|
80
91
|
|
81
|
-
|
82
|
-
|
92
|
+
```
|
93
|
+
export RAILS_ENV=production
|
94
|
+
bundle exec scheduler_daemon start
|
95
|
+
```
|
83
96
|
|
84
97
|
Selectively run tasks like so:
|
85
98
|
|
86
|
-
|
99
|
+
```
|
100
|
+
bundle exec scheduler_daemon start -- --only=task_name1,task_name2 --except=not_me
|
101
|
+
```
|
87
102
|
|
88
|
-
Manually create tasks
|
89
|
-
=====================
|
103
|
+
## Manually create tasks
|
90
104
|
|
91
|
-
If you don't want to use this gem with Rails, you can manually create tasks in a
|
105
|
+
If you don't want to use this gem with Rails, you can manually create tasks in a
|
106
|
+
`scheduled_tasks/` subdirectory and start the daemon with `--skip-rails` (though it'll
|
107
|
+
figure it out anyway if there's no `config/environment.rb` file in the launch directory
|
108
|
+
or `--dir=/path`)
|
92
109
|
|
93
110
|
Here's an example task file.
|
94
111
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
def run
|
99
|
-
do_something
|
100
|
-
log("I've done things")
|
101
|
-
end
|
102
|
-
end
|
112
|
+
```rb
|
113
|
+
class CleanUpTask < Scheduler::SchedulerTask
|
114
|
+
every '2m'
|
103
115
|
|
104
|
-
|
105
|
-
|
116
|
+
def run
|
117
|
+
do_something
|
118
|
+
log("I've done things")
|
119
|
+
end
|
120
|
+
end
|
121
|
+
```
|
106
122
|
|
107
|
-
|
123
|
+
## Specs
|
108
124
|
|
109
|
-
|
110
|
-
|
125
|
+
See [this example spec](scheduler_daemon/spec/scheduled_tasks/session_cleaner_task_spec.rb)
|
126
|
+
for an idea on how to write specs for your tasks.
|
127
|
+
|
128
|
+
## To Do
|
111
129
|
|
112
130
|
Looking for suggestions!
|
113
131
|
|
114
132
|
Send requests to ssoroka78@gmail.com or on twitter, @ssoroka
|
115
133
|
|
116
|
-
Bugs
|
117
|
-
====
|
134
|
+
## Bugs
|
118
135
|
|
119
|
-
Submit bugs here
|
136
|
+
Submit bugs [here](http://github.com/ssoroka/scheduler_daemon/issues)
|
120
137
|
|
121
|
-
Caveats
|
122
|
-
=======
|
138
|
+
## Caveats
|
123
139
|
|
124
|
-
When using the cronic gem to parse dates, be careful of how it interprets your date,
|
125
|
-
|
140
|
+
When using the cronic gem to parse dates, be careful of how it interprets your date, for
|
141
|
+
example:
|
126
142
|
|
127
|
-
|
143
|
+
```
|
144
|
+
every '24h', :first_at => Chronic.parse('noon')
|
145
|
+
```
|
128
146
|
|
129
147
|
will be once a day at noon, but the first time the server starts up (or restarts), noon
|
130
|
-
is relative to the current time of day.
|
131
|
-
daemon starts up after lunch, the date is in the past, *and the task is immediately run*
|
132
|
-
because it thinks it missed its last execution time.
|
133
|
-
this may or may not be a problem.
|
134
|
-
with terms like "noon", "3 am" and "midnight", prepend "next" to it.
|
148
|
+
is relative to the current time of day. Before lunch, and it's in the future. If the
|
149
|
+
daemon starts up after lunch, the date is in the past, *and the task is immediately run*
|
150
|
+
because it thinks it missed its last execution time. Depending on what your task is,
|
151
|
+
this may or may not be a problem. If you always want the date to resolve in the future
|
152
|
+
with terms like "noon", "3 am" and "midnight", prepend "next" to it. ie:
|
135
153
|
|
136
|
-
|
154
|
+
```
|
155
|
+
every '24h', :first_at => Chronic.parse('next noon')
|
156
|
+
```
|
137
157
|
|
138
|
-
Author
|
139
|
-
======
|
158
|
+
## Author
|
140
159
|
|
141
160
|
Steven Soroka
|
142
161
|
|
143
162
|
* [@ssoroka](http://twitter.com/ssoroka)
|
144
163
|
* [My Github repo](http://github.com/ssoroka)
|
145
|
-
* [My blog](http://blog.stevensoroka.ca)
|
146
|
-
|
data/Rakefile
CHANGED
@@ -5,8 +5,8 @@ begin
|
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
7
|
gem.name = "scheduler_daemon"
|
8
|
-
gem.summary = %Q{Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks
|
9
|
-
to perform maintenance tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app,
|
8
|
+
gem.summary = %Q{Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks
|
9
|
+
to perform maintenance tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app,
|
10
10
|
and only loads the environment once, no matter how many tasks run.
|
11
11
|
|
12
12
|
What's so great about it? Well, I'm glad you asked!
|
@@ -22,16 +22,18 @@ begin
|
|
22
22
|
gem.email = "ssoroka78@gmail.com"
|
23
23
|
gem.homepage = "http://github.com/ssoroka/scheduler_daemon"
|
24
24
|
gem.authors = ["Steven Soroka"]
|
25
|
+
gem.add_dependency('activesupport')
|
25
26
|
gem.add_dependency('eventmachine', '>= 0.12.8')
|
26
27
|
gem.add_dependency('daemons', '>= 1.0.10')
|
27
|
-
gem.add_dependency('rufus-scheduler', '
|
28
|
+
gem.add_dependency('rufus-scheduler', '~> 2.0.24')
|
28
29
|
gem.add_dependency('chronic', '>= 0.2.0')
|
30
|
+
gem.add_development_dependency('rspec', '~> 2.13.0')
|
29
31
|
|
30
32
|
gem.executables = ['scheduler_daemon']
|
31
|
-
|
33
|
+
|
32
34
|
everything_from_dirs = %w(bin lib spec)
|
33
35
|
gem.files = everything_from_dirs.map{|d| Dir["#{d}/**/*"] }.flatten
|
34
|
-
gem.files += Dir['*'] - (everything_from_dirs +
|
36
|
+
gem.files += Dir['*'] - (everything_from_dirs + %w(pkg vendor))
|
35
37
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
36
38
|
end
|
37
39
|
|
@@ -44,16 +46,16 @@ end
|
|
44
46
|
# spec.libs << 'lib' << 'spec'
|
45
47
|
# spec.spec_files = FileList['spec/**/*_spec.rb']
|
46
48
|
# end
|
47
|
-
#
|
49
|
+
#
|
48
50
|
# Spec::Rake::SpecTask.new(:rcov) do |spec|
|
49
51
|
# spec.libs << 'lib' << 'spec'
|
50
52
|
# spec.pattern = 'spec/**/*_spec.rb'
|
51
53
|
# spec.rcov = true
|
52
54
|
# end
|
53
|
-
#
|
54
|
-
#
|
55
|
+
#
|
56
|
+
#
|
55
57
|
# task :default => :spec
|
56
|
-
#
|
58
|
+
#
|
57
59
|
# require 'rake/rdoctask'
|
58
60
|
# Rake::RDocTask.new do |rdoc|
|
59
61
|
# if File.exist?('VERSION.yml')
|
@@ -62,10 +64,10 @@ end
|
|
62
64
|
# else
|
63
65
|
# version = ""
|
64
66
|
# end
|
65
|
-
#
|
67
|
+
#
|
66
68
|
# rdoc.rdoc_dir = 'rdoc'
|
67
69
|
# rdoc.title = "scheduler_daemon #{version}"
|
68
70
|
# rdoc.rdoc_files.include('README*')
|
69
71
|
# rdoc.rdoc_files.include('lib/**/*.rb')
|
70
72
|
# end
|
71
|
-
#
|
73
|
+
#
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.
|
1
|
+
1.1.5
|
data/bin/scheduler_daemon
CHANGED
@@ -41,16 +41,20 @@ end
|
|
41
41
|
|
42
42
|
app_args[:dir] ||= Dir.pwd
|
43
43
|
app_args[:pid_dir] ||= File.expand_path(File.join(app_args[:dir], 'log'))
|
44
|
+
app_args[:log_dir] ||= File.expand_path(File.join(app_args[:dir], 'log'))
|
45
|
+
app_args[:multiple] ||= false
|
44
46
|
scheduler = File.join(File.dirname(__FILE__), %w(.. lib loader scheduler_loader.rb))
|
45
47
|
|
46
|
-
raise "#{pid_dir} does not exist" unless File.exist?(app_args[:pid_dir])
|
48
|
+
raise "#{app_args[:pid_dir]} does not exist" unless File.exist?(app_args[:pid_dir])
|
49
|
+
raise "#{app_args[:log_dir]} does not exist" unless File.exist?(app_args[:log_dir])
|
47
50
|
|
48
51
|
app_options = {
|
49
52
|
:app_name => 'scheduler_daemon',
|
50
53
|
:ARGV => launch_args(app_args),
|
51
54
|
:dir_mode => :normal,
|
52
55
|
:dir => app_args[:pid_dir],
|
53
|
-
:
|
56
|
+
:log_dir => app_args[:log_dir],
|
57
|
+
:multiple => app_args[:multiple],
|
54
58
|
:backtrace => true,
|
55
59
|
:log_output => true,
|
56
60
|
:monitor => true
|
@@ -92,12 +92,13 @@ module Scheduler
|
|
92
92
|
|
93
93
|
EventMachine::run {
|
94
94
|
@rufus_scheduler = Rufus::Scheduler::EmScheduler.start_new
|
95
|
+
@rufus_scheduler.singleton_class.send :define_method, :log, self.method(:log).to_proc
|
95
96
|
|
96
97
|
def @rufus_scheduler.handle_exception(job, exception)
|
97
|
-
msg = "[#{env_name}] scheduler job #{job.job_id} (#{job.tags * ' '}) caught exception #{exception.inspect}"
|
98
|
+
msg = "[#{@env_name}] scheduler job #{job.job_id} (#{job.tags * ' '}) caught exception #{exception.inspect}"
|
98
99
|
log msg
|
99
100
|
log exception.backtrace.join("\n")
|
100
|
-
Scheduler::ExceptionHandler.handle_exception(exception, job,
|
101
|
+
Scheduler::ExceptionHandler.handle_exception(exception, job, msg)
|
101
102
|
end
|
102
103
|
|
103
104
|
def @rufus_scheduler.daemon_scheduler
|
@@ -106,10 +107,10 @@ module Scheduler
|
|
106
107
|
|
107
108
|
# This is where the magic happens. tasks in scheduled_tasks/*.rb are loaded up.
|
108
109
|
tasks.each do |task|
|
109
|
-
if task.should_run_in_current_environment?(env_name)
|
110
|
+
if task.should_run_in_current_environment?(@env_name)
|
110
111
|
task.add_to(@rufus_scheduler)
|
111
112
|
else
|
112
|
-
log "[#{env_name}] #{task} not configured to run; skipping."
|
113
|
+
log "[#{@env_name}] #{task} not configured to run; skipping."
|
113
114
|
end
|
114
115
|
end
|
115
116
|
}
|
@@ -19,7 +19,7 @@ module Scheduler
|
|
19
19
|
ensure
|
20
20
|
# Note: AR's ActiveRecord::Base.connection_pool.with_connection(&block) seems broken;
|
21
21
|
# it doesn't release the connection properly.
|
22
|
-
ActiveRecord::Base.connection_pool.release_connection
|
22
|
+
ActiveRecord::Base.connection_pool.release_connection if defined?(ActiveRecord)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -67,9 +67,9 @@ module Scheduler
|
|
67
67
|
def run
|
68
68
|
nil
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def log(*args)
|
72
|
-
daemon_scheduler.log(*args)
|
72
|
+
daemon_scheduler.log(*args) if daemon_scheduler
|
73
73
|
end
|
74
74
|
alias :puts :log
|
75
75
|
end
|
data/scheduler_daemon.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "scheduler_daemon"
|
8
|
-
s.version = "1.1.
|
8
|
+
s.version = "1.1.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Steven Soroka"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2014-02-25"
|
13
13
|
s.description = "a Rails 2.3, Rails 3, and Ruby compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks to perform maintenance tasks, only loading the environment ONCE."
|
14
14
|
s.email = "ssoroka78@gmail.com"
|
15
15
|
s.executables = ["scheduler_daemon"]
|
@@ -47,45 +47,33 @@ Gem::Specification.new do |s|
|
|
47
47
|
s.homepage = "http://github.com/ssoroka/scheduler_daemon"
|
48
48
|
s.require_paths = ["lib"]
|
49
49
|
s.rubygems_version = "1.8.23"
|
50
|
-
s.summary = "Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks
|
50
|
+
s.summary = "Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically running rake tasks to perform maintenance tasks in Rails apps. Scheduler Daemon is made specifically for your Rails app, and only loads the environment once, no matter how many tasks run. What's so great about it? Well, I'm glad you asked! - Only loads your Rails environment once on daemon start, not every time a task is run - Allows you to easily deploy the scheduled tasks with your Rails app instead of depending on an administrator to update crontab - It doesn't use rake or cron! - Gets you up and running with your own daemon in under 2 minutes"
|
51
51
|
|
52
52
|
if s.respond_to? :specification_version then
|
53
53
|
s.specification_version = 3
|
54
54
|
|
55
55
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
|
-
s.add_runtime_dependency(%q<scheduler_daemon>, [">= 0"])
|
57
|
-
s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.8"])
|
58
|
-
s.add_runtime_dependency(%q<daemons>, [">= 1.0.10"])
|
59
|
-
s.add_runtime_dependency(%q<rufus-scheduler>, [">= 2.0.1"])
|
60
|
-
s.add_runtime_dependency(%q<chronic>, [">= 0.2.0"])
|
61
56
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
62
57
|
s.add_runtime_dependency(%q<eventmachine>, [">= 0.12.8"])
|
63
58
|
s.add_runtime_dependency(%q<daemons>, [">= 1.0.10"])
|
64
|
-
s.add_runtime_dependency(%q<rufus-scheduler>, ["
|
59
|
+
s.add_runtime_dependency(%q<rufus-scheduler>, ["~> 2.0.24"])
|
65
60
|
s.add_runtime_dependency(%q<chronic>, [">= 0.2.0"])
|
61
|
+
s.add_development_dependency(%q<rspec>, ["~> 2.13.0"])
|
66
62
|
else
|
67
|
-
s.add_dependency(%q<scheduler_daemon>, [">= 0"])
|
68
|
-
s.add_dependency(%q<eventmachine>, [">= 0.12.8"])
|
69
|
-
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
70
|
-
s.add_dependency(%q<rufus-scheduler>, [">= 2.0.1"])
|
71
|
-
s.add_dependency(%q<chronic>, [">= 0.2.0"])
|
72
63
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
73
64
|
s.add_dependency(%q<eventmachine>, [">= 0.12.8"])
|
74
65
|
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
75
|
-
s.add_dependency(%q<rufus-scheduler>, ["
|
66
|
+
s.add_dependency(%q<rufus-scheduler>, ["~> 2.0.24"])
|
76
67
|
s.add_dependency(%q<chronic>, [">= 0.2.0"])
|
68
|
+
s.add_dependency(%q<rspec>, ["~> 2.13.0"])
|
77
69
|
end
|
78
70
|
else
|
79
|
-
s.add_dependency(%q<scheduler_daemon>, [">= 0"])
|
80
|
-
s.add_dependency(%q<eventmachine>, [">= 0.12.8"])
|
81
|
-
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
82
|
-
s.add_dependency(%q<rufus-scheduler>, [">= 2.0.1"])
|
83
|
-
s.add_dependency(%q<chronic>, [">= 0.2.0"])
|
84
71
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
85
72
|
s.add_dependency(%q<eventmachine>, [">= 0.12.8"])
|
86
73
|
s.add_dependency(%q<daemons>, [">= 1.0.10"])
|
87
|
-
s.add_dependency(%q<rufus-scheduler>, ["
|
74
|
+
s.add_dependency(%q<rufus-scheduler>, ["~> 2.0.24"])
|
88
75
|
s.add_dependency(%q<chronic>, [">= 0.2.0"])
|
76
|
+
s.add_dependency(%q<rspec>, ["~> 2.13.0"])
|
89
77
|
end
|
90
78
|
end
|
91
79
|
|
@@ -3,7 +3,7 @@ require 'scheduler_daemon/command_line_args_to_hash'
|
|
3
3
|
|
4
4
|
describe CommandLineArgsToHash do
|
5
5
|
it 'should process arguments' do
|
6
|
-
h = CommandLineArgsToHash.parse('--hello')
|
6
|
+
h = CommandLineArgsToHash.parse(['--hello'])
|
7
7
|
h['hello'].should == true
|
8
8
|
end
|
9
9
|
|
@@ -23,4 +23,4 @@ describe CommandLineArgsToHash do
|
|
23
23
|
h['two'].should == 'three'
|
24
24
|
end
|
25
25
|
|
26
|
-
end
|
26
|
+
end
|
@@ -9,12 +9,12 @@ require 'scheduler_daemon/rails/generators/scheduler/templates/lib/scheduled_tas
|
|
9
9
|
describe SessionCleanerTask do
|
10
10
|
before(:each) do
|
11
11
|
@task = SessionCleanerTask.new
|
12
|
-
@task.stub
|
12
|
+
@task.stub(:log)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should remove old sessions" do
|
16
16
|
# this test only matters if we're using AR's session store.
|
17
|
-
if defined?(ActionController) && defined?(ActiveRecord) &&
|
17
|
+
if defined?(ActionController) && defined?(ActiveRecord) &&
|
18
18
|
ActionController::Base.session_store == ActiveRecord::SessionStore
|
19
19
|
|
20
20
|
# insert old session
|
data/spec/scheduler_spec.rb
CHANGED
metadata
CHANGED
@@ -1,176 +1,99 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scheduler_daemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Steven Soroka
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-02-25 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
14
|
+
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: eventmachine
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: 0.12.8
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: 0.12.8
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: daemons
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 1.0.10
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: 1.0.10
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rufus-scheduler
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - "~>"
|
68
60
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.0.
|
61
|
+
version: 2.0.24
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - "~>"
|
76
67
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.0.
|
68
|
+
version: 2.0.24
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: chronic
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: 0.2.0
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: 0.2.0
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
|
-
name:
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
|
-
type: :runtime
|
103
|
-
prerelease: false
|
104
|
-
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: eventmachine
|
84
|
+
name: rspec
|
112
85
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
86
|
requirements:
|
115
|
-
- -
|
87
|
+
- - "~>"
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
118
|
-
type: :
|
89
|
+
version: 2.13.0
|
90
|
+
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
93
|
requirements:
|
123
|
-
- -
|
94
|
+
- - "~>"
|
124
95
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: daemons
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
|
-
requirements:
|
131
|
-
- - ! '>='
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: 1.0.10
|
134
|
-
type: :runtime
|
135
|
-
prerelease: false
|
136
|
-
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 1.0.10
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
|
-
name: rufus-scheduler
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ! '>='
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: 2.0.1
|
150
|
-
type: :runtime
|
151
|
-
prerelease: false
|
152
|
-
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 2.0.1
|
158
|
-
- !ruby/object:Gem::Dependency
|
159
|
-
name: chronic
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
|
-
requirements:
|
163
|
-
- - ! '>='
|
164
|
-
- !ruby/object:Gem::Version
|
165
|
-
version: 0.2.0
|
166
|
-
type: :runtime
|
167
|
-
prerelease: false
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 0.2.0
|
96
|
+
version: 2.13.0
|
174
97
|
description: a Rails 2.3, Rails 3, and Ruby compatible scheduler daemon. Replaces
|
175
98
|
cron/rake pattern of periodically running rake tasks to perform maintenance tasks,
|
176
99
|
only loading the environment ONCE.
|
@@ -209,30 +132,28 @@ files:
|
|
209
132
|
- spec/spec_helper.rb
|
210
133
|
homepage: http://github.com/ssoroka/scheduler_daemon
|
211
134
|
licenses: []
|
212
|
-
|
135
|
+
metadata: {}
|
136
|
+
post_install_message:
|
213
137
|
rdoc_options: []
|
214
138
|
require_paths:
|
215
139
|
- lib
|
216
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
141
|
requirements:
|
219
|
-
- -
|
142
|
+
- - ">="
|
220
143
|
- !ruby/object:Gem::Version
|
221
144
|
version: '0'
|
222
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
|
-
none: false
|
224
146
|
requirements:
|
225
|
-
- -
|
147
|
+
- - ">="
|
226
148
|
- !ruby/object:Gem::Version
|
227
149
|
version: '0'
|
228
150
|
requirements: []
|
229
|
-
|
230
|
-
|
231
|
-
signing_key:
|
151
|
+
rubygems_version: 3.4.3
|
152
|
+
signing_key:
|
232
153
|
specification_version: 3
|
233
154
|
summary: Rails 3 compatible scheduler daemon. Replaces cron/rake pattern of periodically
|
234
|
-
running rake tasks
|
235
|
-
is made specifically for your Rails app,
|
155
|
+
running rake tasks to perform maintenance tasks in Rails apps. Scheduler Daemon
|
156
|
+
is made specifically for your Rails app, and only loads the environment once, no
|
236
157
|
matter how many tasks run. What's so great about it? Well, I'm glad you asked! -
|
237
158
|
Only loads your Rails environment once on daemon start, not every time a task is
|
238
159
|
run - Allows you to easily deploy the scheduled tasks with your Rails app instead
|