sidekiq-cron 1.0.4 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Changes.md +34 -0
- data/Dockerfile +1 -1
- data/Gemfile +1 -30
- data/README.md +149 -65
- data/Rakefile +0 -18
- data/docker-compose.yml +3 -1
- data/lib/sidekiq/cron/job.rb +92 -25
- data/lib/sidekiq/cron/launcher.rb +34 -40
- data/lib/sidekiq/cron/locales/de.yml +1 -1
- data/lib/sidekiq/cron/locales/en.yml +5 -1
- data/lib/sidekiq/cron/locales/ja.yml +1 -1
- data/lib/sidekiq/cron/locales/ru.yml +1 -1
- data/lib/sidekiq/cron/locales/zh-CN.yml +1 -1
- data/lib/sidekiq/cron/poller.rb +5 -5
- data/lib/sidekiq/cron/version.rb +7 -0
- data/lib/sidekiq/cron/views/cron.erb +8 -6
- data/lib/sidekiq/cron/views/cron.slim +5 -4
- data/lib/sidekiq/cron/views/cron_show.erb +88 -0
- data/lib/sidekiq/cron/views/cron_show.slim +61 -0
- data/lib/sidekiq/cron/web_extension.rb +20 -3
- data/lib/sidekiq/cron.rb +1 -0
- data/sidekiq-cron.gemspec +29 -108
- data/test/integration/performance_test.rb +3 -5
- data/test/test_helper.rb +30 -19
- data/test/unit/job_test.rb +134 -3
- data/test/unit/poller_test.rb +1 -3
- data/test/unit/web_extension_test.rb +56 -36
- metadata +33 -159
- data/.travis.yml +0 -21
- data/VERSION +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '091abb12b81574bf5fad5130f4e343aaad6adeceb0daae8c46a6d09dbaa7ee58'
|
4
|
+
data.tar.gz: 1ecbf9ba2fd82ff69a423993e7aa3678e7fabc6fb55e2acea74ec1cb83a8af3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9cfd9a8e2efdcf3ae293533421a1c09b7dcc3154e90d749fd3e3a47ccaff6d673daa68877b2ca3b7939139603ee04e816c8c5ae51ef64d818d8d013eff43d9f0
|
7
|
+
data.tar.gz: 0d86e3bb4b06869889934a37ef30f117a4a28769a07e75b3d7547c49d9d8e5dfe4931f608b8b7b18cdc1b70cfdaf6be55aa043844b047b877ff7dfa21271a9f4
|
data/Changes.md
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
v 1.3.0
|
2
|
+
-------
|
3
|
+
|
4
|
+
- add confirmation dialog when enquing jobs from UI
|
5
|
+
- start to support Sidekiq `average_scheduled_poll_interval` option (replaced `poll_interval`)
|
6
|
+
- enable to use latest fugit to parse cron notation alowing use of natural language (ie `"every 30 minutes"`)
|
7
|
+
- fix deprecation warning for redis 4.6.x
|
8
|
+
- fix different response from Redis#exists in different redis versions
|
9
|
+
- All PRs:
|
10
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/275
|
11
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/287
|
12
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/309
|
13
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/299
|
14
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/314
|
15
|
+
- https://github.com/ondrejbartas/sidekiq-cron/pull/288
|
16
|
+
|
17
|
+
v 1.2.0
|
18
|
+
-------
|
19
|
+
|
20
|
+
- updated readme
|
21
|
+
- fix problem with Sidekiq::Launcher and requiring it when not needed
|
22
|
+
- better patching of Sidekiq::Launcher
|
23
|
+
- fixed Dockerfile
|
24
|
+
|
25
|
+
v 1.1.0
|
26
|
+
-------
|
27
|
+
|
28
|
+
- updated readme
|
29
|
+
- fix unit tests - changed argument error when getting invalid cron format
|
30
|
+
- when fallbacking old job enqueued time use `Time.parse` šwithout format (so ruby can decide best method to parse it)
|
31
|
+
- add option `date_as_argument` which will add to your job arguments on last place `Time.now.to_f` when it was eneuqued
|
32
|
+
- add option `description` which will allow you to add notes to your jobs so in web view you can see it
|
33
|
+
- fixed translations
|
34
|
+
|
1
35
|
v 1.0.4
|
2
36
|
-------
|
3
37
|
|
data/Dockerfile
CHANGED
data/Gemfile
CHANGED
@@ -1,32 +1,3 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
|
4
|
-
gem 'fugit', '~> 1.1'
|
5
|
-
|
6
|
-
group :development do
|
7
|
-
gem 'bundler'
|
8
|
-
gem 'simplecov'
|
9
|
-
|
10
|
-
gem 'redis-namespace', '>= 1.5.2'
|
11
|
-
gem 'shoulda-context'
|
12
|
-
|
13
|
-
gem 'rack'
|
14
|
-
gem 'rack-test'
|
15
|
-
|
16
|
-
gem 'jeweler'
|
17
|
-
|
18
|
-
gem 'minitest'
|
19
|
-
gem 'test-unit'
|
20
|
-
gem 'sdoc' # sdoc -N .
|
21
|
-
|
22
|
-
gem 'slim'
|
23
|
-
gem 'sinatra'
|
24
|
-
|
25
|
-
gem 'mocha'
|
26
|
-
gem 'coveralls'
|
27
|
-
|
28
|
-
gem 'shotgun'
|
29
|
-
|
30
|
-
gem 'guard'
|
31
|
-
gem 'guard-minitest'
|
32
|
-
end
|
3
|
+
gemspec
|
data/README.md
CHANGED
@@ -1,64 +1,68 @@
|
|
1
|
-
Sidekiq-Cron
|
2
|
-
================================================================================================================================================================================================================================================================================================================================================================================================================================================
|
1
|
+
# Sidekiq-Cron
|
3
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/sidekiq-cron.svg)](http://badge.fury.io/rb/sidekiq-cron)
|
4
|
+
[![Build Status](https://github.com/ondrejbartas/sidekiq-cron/workflows/CI/badge.svg?branch=master)](https://github.com/ondrejbartas/sidekiq-cron/actions)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/github/ondrejbartas/sidekiq-cron/badge.svg?branch=master)](https://coveralls.io/github/ondrejbartas/sidekiq-cron?branch=master)
|
4
6
|
[![Join the chat at https://gitter.im/ondrejbartas/sidekiq-cron](https://badges.gitter.im/ondrejbartas/sidekiq-cron.svg)](https://gitter.im/ondrejbartas/sidekiq-cron?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
5
7
|
|
6
|
-
|
8
|
+
> A scheduling add-on for [Sidekiq](http://sidekiq.org)
|
7
9
|
|
8
|
-
|
10
|
+
🎬 [Introduction video about Sidekiq-Cron by Drifting Ruby](https://www.driftingruby.com/episodes/periodic-tasks-with-sidekiq-cron)
|
9
11
|
|
10
|
-
|
12
|
+
Sidekiq-Cron runs a thread alongside Sidekiq workers to schedule jobs at specified times (using cron notation `* * * * *` parsed by [Fugit](https://github.com/floraison/fugit), more about [cron notation](http://www.nncron.ru/help/EN/working/cron-format.htm).
|
11
13
|
|
12
14
|
Checks for new jobs to schedule every 30 seconds and doesn't schedule the same job multiple times when more than one Sidekiq worker is running.
|
13
15
|
|
14
16
|
Scheduling jobs are added only when at least one Sidekiq process is running, but it is safe to use Sidekiq-Cron in environments where multiple Sidekiq processes or nodes are running.
|
15
17
|
|
16
|
-
If you want to know how scheduling work, check out [under the hood](#under-the-hood)
|
18
|
+
If you want to know how scheduling work, check out [under the hood](#under-the-hood).
|
17
19
|
|
18
|
-
Works with ActiveJob (Rails 4.2+)
|
20
|
+
Works with ActiveJob (Rails 4.2+).
|
19
21
|
|
20
|
-
You don't need Sidekiq PRO, you can use this gem with plain
|
22
|
+
You don't need Sidekiq PRO, you can use this gem with plain Sidekiq.
|
21
23
|
|
22
|
-
|
23
|
-
-----------------
|
24
|
+
## Upgrade from <0.6x to 1.0.x
|
24
25
|
|
25
|
-
-
|
26
|
-
- Sidekiq 5, or 4, or 3 and greater is required (for Sidekiq < 4 use version sidekiq-cron 0.3.1)
|
26
|
+
Please be aware that Sidekiq-Cron < 1.0 was relying on rufus-scheduler < 3.5. Using those older sidekiq-cron with rufus-scheduler >= 3.5 ends up with jobs failing on creation. Sidekiq-cron 1.0 includes a patch that switches from rufus-scheduler to rufus-scheduler's core dependency, fugit.
|
27
27
|
|
28
|
-
|
29
|
-
----------
|
30
|
-
before upgrading to new version, please read:
|
31
|
-
[Change Log](https://github.com/ondrejbartas/sidekiq-cron/blob/master/Changes.md)
|
28
|
+
## Changelog
|
32
29
|
|
33
|
-
|
34
|
-
------------
|
30
|
+
Before upgrading to new version, please read our [ChangeLog](Changes.md).
|
35
31
|
|
36
|
-
|
32
|
+
## Installation
|
37
33
|
|
38
|
-
|
34
|
+
### Requirements
|
39
35
|
|
40
|
-
|
36
|
+
- Redis 2.8 or greater is required. (Redis 3.0.3 or greater is recommended for large scale use)
|
37
|
+
- Sidekiq 5, or 4, or 3 and greater is required (for Sidekiq < 4 use version sidekiq-cron 0.3.1)
|
41
38
|
|
39
|
+
Install the gem:
|
42
40
|
|
43
|
-
|
44
|
-
|
41
|
+
$ gem install sidekiq-cron
|
42
|
+
|
43
|
+
Or add to your `Gemfile` and run `bundle install`:
|
45
44
|
|
45
|
+
gem "sidekiq-cron", "~> 1.1"
|
46
|
+
|
47
|
+
## Getting Started
|
46
48
|
|
47
49
|
If you are not using Rails, you need to add `require 'sidekiq-cron'` somewhere after `require 'sidekiq'`.
|
48
50
|
|
49
|
-
|
51
|
+
**Job properties:**
|
50
52
|
|
51
53
|
```ruby
|
52
54
|
{
|
53
|
-
'name'
|
54
|
-
'cron'
|
55
|
+
'name' => 'name_of_job', # must be uniq!
|
56
|
+
'cron' => '1 * * * *', # execute at 1 minute of every hour, ex: 12:01, 13:01, 14:01, 15:01, ... (HH:MM)
|
55
57
|
'class' => 'MyClass',
|
56
|
-
#OPTIONAL
|
58
|
+
# OPTIONAL
|
57
59
|
'queue' => 'name of queue',
|
58
|
-
'args'
|
60
|
+
'args' => '[Array or Hash] of arguments which will be passed to perform method',
|
61
|
+
'date_as_argument' => true, # add the time of execution as last argument of the perform method
|
59
62
|
'active_job' => true, # enqueue job through rails 4.2+ active job interface
|
60
63
|
'queue_name_prefix' => 'prefix', # rails 4.2+ active job queue with prefix
|
61
|
-
'queue_name_delimiter' => '.' # rails 4.2+ active job queue with custom delimiter
|
64
|
+
'queue_name_delimiter' => '.', # rails 4.2+ active job queue with custom delimiter
|
65
|
+
'description' => 'A sentence describing what work this job performs.'
|
62
66
|
}
|
63
67
|
```
|
64
68
|
|
@@ -66,20 +70,27 @@ _Job properties_:
|
|
66
70
|
|
67
71
|
For testing your cron notation you can use [crontab.guru](https://crontab.guru).
|
68
72
|
|
69
|
-
|
73
|
+
Sidekiq-Cron uses [Fugit](https://github.com/floraison/fugit) to parse the cronline.
|
74
|
+
|
70
75
|
If using Rails, this is evaluated against the timezone configured in Rails, otherwise the default is UTC.
|
71
76
|
|
72
77
|
If you want to have your jobs enqueued based on a different time zone you can specify a timezone in the cronline,
|
73
78
|
like this `'0 22 * * 1-5 America/Chicago'`.
|
74
79
|
|
75
|
-
See [rufus-scheduler documentation](https://github.com/jmettraux/rufus-scheduler#a-note-about-timezones) for more information.
|
80
|
+
See [rufus-scheduler documentation](https://github.com/jmettraux/rufus-scheduler#a-note-about-timezones) for more information.
|
81
|
+
|
82
|
+
**NOTE** Rufus scheduler is using Fugit under the hood, so documentation for Rufus Scheduler can help you also.
|
76
83
|
|
77
84
|
### What objects/classes can be scheduled
|
85
|
+
|
78
86
|
#### Sidekiq Worker
|
87
|
+
|
79
88
|
In this example, we are using `HardWorker` which looks like:
|
89
|
+
|
80
90
|
```ruby
|
81
91
|
class HardWorker
|
82
92
|
include Sidekiq::Worker
|
93
|
+
|
83
94
|
def perform(*args)
|
84
95
|
# do something
|
85
96
|
end
|
@@ -87,7 +98,9 @@ end
|
|
87
98
|
```
|
88
99
|
|
89
100
|
#### Active Job Worker
|
90
|
-
|
101
|
+
|
102
|
+
You can schedule `ExampleJob` which looks like:
|
103
|
+
|
91
104
|
```ruby
|
92
105
|
class ExampleJob < ActiveJob::Base
|
93
106
|
queue_as :default
|
@@ -98,11 +111,15 @@ class ExampleJob < ActiveJob::Base
|
|
98
111
|
end
|
99
112
|
```
|
100
113
|
|
114
|
+
For Active jobs you can use `symbolize_args: true` in `Sidekiq::Cron::Job.create` or in Hash configuration,
|
115
|
+
which will ensure that arguments you are passing to it will be symbolized when passed back to `perform` method in worker.
|
116
|
+
|
101
117
|
#### Adding Cron job:
|
102
|
-
```ruby
|
103
118
|
|
119
|
+
```ruby
|
104
120
|
class HardWorker
|
105
121
|
include Sidekiq::Worker
|
122
|
+
|
106
123
|
def perform(name, count)
|
107
124
|
# do something
|
108
125
|
end
|
@@ -123,16 +140,15 @@ else
|
|
123
140
|
puts job.errors
|
124
141
|
end
|
125
142
|
|
126
|
-
#or simple
|
127
|
-
|
143
|
+
# or simple
|
128
144
|
unless job.save
|
129
|
-
puts job.errors #will return array of errors
|
145
|
+
puts job.errors # will return array of errors
|
130
146
|
end
|
131
147
|
```
|
132
148
|
|
133
149
|
Load more jobs from hash:
|
134
|
-
```ruby
|
135
150
|
|
151
|
+
```ruby
|
136
152
|
hash = {
|
137
153
|
'name_of_job' => {
|
138
154
|
'class' => 'MyClass',
|
@@ -149,6 +165,7 @@ Sidekiq::Cron::Job.load_from_hash hash
|
|
149
165
|
```
|
150
166
|
|
151
167
|
Load more jobs from array:
|
168
|
+
|
152
169
|
```ruby
|
153
170
|
array = [
|
154
171
|
{
|
@@ -167,17 +184,17 @@ array = [
|
|
167
184
|
Sidekiq::Cron::Job.load_from_array array
|
168
185
|
```
|
169
186
|
|
170
|
-
Bang-suffixed methods will remove jobs that are not present in the given hash/array,
|
171
|
-
update jobs that have the same names, and create new ones when the names are previously unknown.
|
187
|
+
Bang-suffixed methods will remove jobs that are not present in the given hash/array, update jobs that have the same names, and create new ones when the names are previously unknown.
|
172
188
|
|
173
189
|
```ruby
|
174
190
|
Sidekiq::Cron::Job#load_from_hash! hash
|
175
191
|
Sidekiq::Cron::Job#load_from_array! array
|
176
192
|
```
|
177
193
|
|
178
|
-
|
194
|
+
Or from YAML (same notation as Resque-scheduler):
|
195
|
+
|
179
196
|
```yaml
|
180
|
-
#config/schedule.yml
|
197
|
+
# config/schedule.yml
|
181
198
|
|
182
199
|
my_first_job:
|
183
200
|
cron: "*/5 * * * *"
|
@@ -193,7 +210,7 @@ second_job:
|
|
193
210
|
```
|
194
211
|
|
195
212
|
```ruby
|
196
|
-
#initializers/sidekiq.rb
|
213
|
+
# config/initializers/sidekiq.rb
|
197
214
|
schedule_file = "config/schedule.yml"
|
198
215
|
|
199
216
|
if File.exist?(schedule_file) && Sidekiq.server?
|
@@ -201,56 +218,60 @@ if File.exist?(schedule_file) && Sidekiq.server?
|
|
201
218
|
end
|
202
219
|
```
|
203
220
|
|
204
|
-
|
221
|
+
Or you can use for loading jobs from yml file [sidekiq-cron-tasks](https://github.com/coverhound/sidekiq-cron-tasks) which will add rake task `bundle exec rake sidekiq_cron:load` to your rails application.
|
222
|
+
|
223
|
+
### Finding jobs
|
205
224
|
|
206
|
-
#### Finding jobs
|
207
225
|
```ruby
|
208
|
-
#return array of all jobs
|
226
|
+
# return array of all jobs
|
209
227
|
Sidekiq::Cron::Job.all
|
210
228
|
|
211
|
-
#return one job by its unique name - case sensitive
|
229
|
+
# return one job by its unique name - case sensitive
|
212
230
|
Sidekiq::Cron::Job.find "Job Name"
|
213
231
|
|
214
|
-
#return one job by its unique name - you can use hash with 'name' key
|
232
|
+
# return one job by its unique name - you can use hash with 'name' key
|
215
233
|
Sidekiq::Cron::Job.find name: "Job Name"
|
216
234
|
|
217
|
-
#if job can't be found nil is returned
|
235
|
+
# if job can't be found nil is returned
|
218
236
|
```
|
219
237
|
|
220
|
-
|
238
|
+
### Destroy jobs:
|
239
|
+
|
221
240
|
```ruby
|
222
|
-
#
|
241
|
+
# destroy all jobs
|
223
242
|
Sidekiq::Cron::Job.destroy_all!
|
224
243
|
|
225
|
-
#destroy job by its name
|
244
|
+
# destroy job by its name
|
226
245
|
Sidekiq::Cron::Job.destroy "Job Name"
|
227
246
|
|
228
|
-
#destroy found job
|
247
|
+
# destroy found job
|
229
248
|
Sidekiq::Cron::Job.find('Job name').destroy
|
230
249
|
```
|
231
250
|
|
232
|
-
|
251
|
+
### Work with job:
|
252
|
+
|
233
253
|
```ruby
|
234
254
|
job = Sidekiq::Cron::Job.find('Job name')
|
235
255
|
|
236
|
-
#disable cron scheduling
|
256
|
+
# disable cron scheduling
|
237
257
|
job.disable!
|
238
258
|
|
239
|
-
#enable cron scheduling
|
259
|
+
# enable cron scheduling
|
240
260
|
job.enable!
|
241
261
|
|
242
|
-
#get status of job:
|
262
|
+
# get status of job:
|
243
263
|
job.status
|
244
264
|
# => enabled/disabled
|
245
265
|
|
246
|
-
#enqueue job right now!
|
266
|
+
# enqueue job right now!
|
247
267
|
job.enque!
|
248
268
|
```
|
249
269
|
|
250
|
-
How to start scheduling?
|
270
|
+
### How to start scheduling?
|
271
|
+
|
251
272
|
Just start Sidekiq workers by running:
|
252
273
|
|
253
|
-
sidekiq
|
274
|
+
$ sidekiq
|
254
275
|
|
255
276
|
### Web UI for Cron Jobs
|
256
277
|
|
@@ -263,7 +284,7 @@ With this, you will get:
|
|
263
284
|
### Forking Processes
|
264
285
|
|
265
286
|
If you're using a forking web server like Unicorn you may run into an issue where the Redis connection is used
|
266
|
-
before the process forks, causing the following exception
|
287
|
+
before the process forks, causing the following exception:
|
267
288
|
|
268
289
|
Redis::InheritedError: Tried to use a connection from a child process without reconnecting. You need to reconnect to Redis after forking.
|
269
290
|
|
@@ -279,37 +300,100 @@ Sidekiq.configure_server do |config|
|
|
279
300
|
end
|
280
301
|
```
|
281
302
|
|
282
|
-
|
303
|
+
**NOTE** This API is only available in Sidekiq 3.x.
|
304
|
+
|
305
|
+
## Tests in Sidekiq-Cron
|
306
|
+
|
307
|
+
If you need to check code of sidekiq-cron run `rake test` in this repository.
|
283
308
|
|
284
309
|
## Under the hood
|
285
310
|
|
286
311
|
When you start the Sidekiq process, it starts one thread with `Sidekiq::Poller` instance, which perform the adding of scheduled jobs to queues, retries etc.
|
287
312
|
|
288
|
-
Sidekiq-Cron adds itself into this start procedure and starts another thread with `Sidekiq::Cron::Poller` which checks all enabled Sidekiq cron jobs every
|
313
|
+
Sidekiq-Cron adds itself into this start procedure and starts another thread with `Sidekiq::Cron::Poller` which checks all enabled Sidekiq cron jobs every 30 seconds, if they should be added to queue (their cronline matches time of check).
|
289
314
|
|
290
315
|
Sidekiq-Cron is checking jobs to be enqueued every 30s by default, you can change it by setting:
|
291
|
-
|
316
|
+
|
317
|
+
```ruby
|
318
|
+
# For Sidekiq >= 3.4
|
319
|
+
Sidekiq.options[:average_scheduled_poll_interval] = 10
|
320
|
+
|
321
|
+
# For older versions of Sidekiq
|
292
322
|
Sidekiq.options[:poll_interval] = 10
|
293
323
|
```
|
294
324
|
|
295
325
|
Sidekiq-Cron is safe to use with multiple sidekiq processes or nodes. It uses a Redis sorted set to determine that only the first process who asks can enqueue scheduled jobs into the queue.
|
296
326
|
|
297
327
|
## Thanks to
|
328
|
+
* [@284km](https://github.com/284km)
|
298
329
|
* [@7korobi](https://github.com/7korobi)
|
330
|
+
* [@adrianobarroso](https://github.com/adrianobarroso])
|
331
|
+
* [@alexeyramazanov](https://github.com/alexeyramazanov)
|
299
332
|
* [@antulik](https://github.com/antulik)
|
333
|
+
* [@arthurbryant](https://github.com/arthurbryant)
|
334
|
+
* [@cabello](https://github.com/cabello)
|
335
|
+
* [@camkidman](https://github.com/camkidman)
|
336
|
+
* [@cgunther](https://github.com/cgunther)
|
337
|
+
* [@chuchuva](https://github.com/chuchuva)
|
338
|
+
* [@corroded](https://github.com/corroded)
|
339
|
+
* [@D1ceWard](https://github.com/D1ceWard])
|
340
|
+
* [@davidtrogers](https://github.com/davidtrogers)
|
341
|
+
* [@denispeplin](https://github.com/denispeplin)
|
342
|
+
* [@dwarburt](https://github.com/dwarburt)
|
343
|
+
* [@Envek](https://github.com/Envek)
|
344
|
+
* [@Eunix](https://github.com/Eunix)
|
300
345
|
* [@felixbuenemann](https://github.com/felixbuenemann)
|
346
|
+
* [@film42](https://github.com/film42])
|
347
|
+
* [@giriss](https://github.com/giriss)
|
348
|
+
* [@gitter](https://github.com/gitter)
|
301
349
|
* [@gstark](https://github.com/gstark)
|
350
|
+
* [@h0jeZvgoxFepBQ2C](https://github.com/h0jeZvgoxFepBQ2C)
|
351
|
+
* [@incubus](https://github.com/incubus)
|
352
|
+
* [@jack0pan](https://github.com/jack0pan)
|
353
|
+
* [@jmettraux](https://github.com/jmettraux)
|
354
|
+
* [@johnathanludwig](https://github.com/johnathanludwig)
|
355
|
+
* [@joshuacronemeyer](https://github.com/joshuacronemeyer)
|
356
|
+
* [@jpserra](https://github.com/jpserra)
|
357
|
+
* [@Junyulive](https://github.com/Junyulive)
|
358
|
+
* [@le0pard](https://github.com/le0pard)
|
359
|
+
* [@lepfhty](https://github.com/lepfhty)
|
360
|
+
* [@macool](https://github.com/macool)
|
361
|
+
* [@masayukioguni](https://github.com/masayukioguni)
|
362
|
+
* [@matsimitsu](https://github.com/matsimitsu)
|
363
|
+
* [@merrington](https://github.com/merrington)
|
364
|
+
* [@MikeRogers0](https://github.com/MikeRogers0)
|
365
|
+
* [@MMartyn](https://github.com/MMartyn)
|
366
|
+
* [@mrchucho](https://github.com/mrchucho)
|
367
|
+
* [@n00dle](https://github.com/n00dle)
|
368
|
+
* [@ngouy](https://github.com/ngouy)
|
369
|
+
* [@nhoffmann](https://github.com/nhoffmann)
|
370
|
+
* [@nicolasleger](https://github.com/nicolasleger)
|
371
|
+
* [@nikolai-b](https://github.com/nikolai-b)
|
372
|
+
* [@oivoodoo](https://github.com/oivoodoo)
|
373
|
+
* [@paniko0](https://github.com/paniko0)
|
374
|
+
* [@petergoldstein](https://github.com/petergoldstein)
|
302
375
|
* [@RajRoR](https://github.com/RajRoR)
|
376
|
+
* [@rmm5t](https://github.com/rmm5t)
|
303
377
|
* [@romeuhcf](https://github.com/romeuhcf)
|
378
|
+
* [@rylwin](https://github.com/rylwin)
|
379
|
+
* [@ryohashimoto](https://github.com/ryohashimoto)
|
380
|
+
* [@safeforge](https://github.com/safeforge)
|
304
381
|
* [@siruguri](https://github.com/siruguri)
|
305
382
|
* [@Soliah](https://github.com/Soliah)
|
383
|
+
* [@spk](https://github.com/spk)
|
306
384
|
* [@stephankaag](https://github.com/stephankaag)
|
385
|
+
* [@stormsilver](https://github.com/stormsilver)
|
307
386
|
* [@sue445](https://github.com/sue445)
|
308
387
|
* [@sylg](https://github.com/sylg)
|
388
|
+
* [@tai2](https://github.com/tai2)
|
389
|
+
* [@tfluehmann](https://github.com/tfluehmann)
|
390
|
+
* [@timminkov](https://github.com/timminkov)
|
391
|
+
* [@tisba](https://github.com/tisba)
|
309
392
|
* [@tmeinlschmidt](https://github.com/tmeinlschmidt)
|
393
|
+
* [@tomprats](https://github.com/tomprats)
|
394
|
+
* [@zedtux](https://github.com/zedtux)
|
310
395
|
* [@zerobearing2](https://github.com/zerobearing2)
|
311
396
|
|
312
|
-
|
313
397
|
## Contributing to sidekiq-cron
|
314
398
|
|
315
399
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
@@ -322,4 +406,4 @@ Sidekiq-Cron is safe to use with multiple sidekiq processes or nodes. It uses a
|
|
322
406
|
|
323
407
|
## Copyright
|
324
408
|
|
325
|
-
Copyright (c) 2013 Ondrej Bartas. See LICENSE.txt for further details.
|
409
|
+
Copyright (c) 2013 Ondrej Bartas. See [LICENSE](LICENSE.txt) for further details.
|
data/Rakefile
CHANGED
@@ -13,26 +13,8 @@ rescue Bundler::BundlerError => e
|
|
13
13
|
end
|
14
14
|
require 'rake'
|
15
15
|
|
16
|
-
require 'jeweler'
|
17
|
-
Jeweler::Tasks.new do |gem|
|
18
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
19
|
-
gem.name = "sidekiq-cron"
|
20
|
-
gem.homepage = "http://github.com/ondrejbartas/sidekiq-cron"
|
21
|
-
gem.license = "MIT"
|
22
|
-
gem.summary = %Q{Sidekiq Cron helps to add repeated scheduled jobs}
|
23
|
-
gem.description = %Q{Enables to set jobs to be run in specified time (using CRON notation)}
|
24
|
-
gem.email = "ondrej@bartas.cz"
|
25
|
-
gem.authors = ["Ondrej Bartas"]
|
26
|
-
# dependencies defined in Gemfile
|
27
|
-
end
|
28
|
-
Jeweler::RubygemsDotOrgTasks.new
|
29
|
-
|
30
16
|
#TESTING
|
31
17
|
|
32
|
-
task :doc do
|
33
|
-
system 'sdoc -N .'
|
34
|
-
end
|
35
|
-
|
36
18
|
require 'rake/testtask'
|
37
19
|
task :default => :test
|
38
20
|
|
data/docker-compose.yml
CHANGED