arask 1.2.0 → 1.2.5
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 +5 -5
- data/README.md +32 -5
- data/lib/arask.rb +30 -15
- data/lib/arask/initialize.rb +1 -1
- data/lib/arask/railtie.rb +4 -0
- data/lib/arask/version.rb +1 -1
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 277e0095ea412d5b05a792f0a2210b987165b9e18c292770f5655b75ffa5dc38
|
4
|
+
data.tar.gz: 3afcc9cc2d53b69aeb4831d30b26afa1931289bfdd58fdf3c75dc3199d9a55ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df3e1a1400bd5e3584380219422f586551af432e13cdee39544640295a9bd7635c594957c45d8af3bf080ac0f09010e28928e8b79aebbfbe1a8ebbdd1aa1d4e2
|
7
|
+
data.tar.gz: 1ecd42c9bf9448c4fccd78f335cc9b84fd26201ac6727894849de3ca0318a6f5194199f5c193c865ca1ba1458fc5ccab78d0b90626db9aea72f9738a6f097b9d
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# Arask
|
2
|
+
|
2
3
|
[](https://badge.fury.io/rb/arask)
|
3
4
|
[](https://travis-ci.org/Ebbe/arask)
|
4
5
|
[](https://coveralls.io/github/Ebbe/arask?branch=master)
|
@@ -10,12 +11,15 @@ No need to setup anything outside of Rails. If Rails is running, so is Arask. If
|
|
10
11
|
Use cron syntax or simply define the interval.
|
11
12
|
|
12
13
|
## Installation
|
14
|
+
|
13
15
|
Add this line to your application's Gemfile:
|
16
|
+
|
14
17
|
```ruby
|
15
18
|
gem 'arask'
|
16
19
|
```
|
17
20
|
|
18
21
|
Execute:
|
22
|
+
|
19
23
|
```bash
|
20
24
|
$ bundle install
|
21
25
|
$ rails generate arask:install
|
@@ -25,9 +29,11 @@ $ rails db:migrate
|
|
25
29
|
Setup your tasks in config/initializers/arask.rb. Initially it looks [like this](lib/arask/initialize.rb).
|
26
30
|
|
27
31
|
## Usage
|
32
|
+
|
28
33
|
After installation, you can edit config/initializers/arask.rb with your tasks.
|
29
34
|
|
30
35
|
### Examples of jobs in the initializer
|
36
|
+
|
31
37
|
```ruby
|
32
38
|
# Rake tasks with cron syntax
|
33
39
|
arask.create task: 'send:logs', cron: '0 2 * * *' # At 02:00 every day
|
@@ -52,34 +58,55 @@ arask.on_exception email: 'errors@example.com'
|
|
52
58
|
|
53
59
|
# Run code on exceptions
|
54
60
|
arask.on_exception do |exception, arask_job|
|
55
|
-
|
61
|
+
MyExceptionHandler.new(exception)
|
56
62
|
end
|
57
63
|
```
|
58
64
|
|
59
65
|
### About cron
|
66
|
+
|
60
67
|
Arask uses [fugit](https://github.com/floraison/fugit) to parse cron and get next execution time. It follows normal cron syntax. You can test your cron at https://crontab.guru/.
|
61
68
|
|
62
69
|
Not supported is `@reboot`.
|
63
70
|
|
64
71
|
### About interval
|
72
|
+
|
65
73
|
The interval starts when the task has started running. If a task with the interval `:hourly` is run at 08:37PM, then it will run the next time at 09:37PM.
|
66
74
|
|
67
75
|
## Todos
|
68
|
-
|
69
|
-
|
76
|
+
|
77
|
+
- Have a "try again" feature. For instance `arask.create script: 'raise "I failed"', interval: :daily, fail_retry: 5.minutes, retry_at_most: 2`
|
78
|
+
- Be able to specify line and number that failed for an exception:
|
79
|
+
|
70
80
|
```ruby
|
71
81
|
file,line,_ = caller.first.split(':')
|
72
82
|
fileline = File.readlines(file)[line.to_i - 1].strip
|
73
83
|
```
|
74
84
|
|
75
|
-
##
|
76
|
-
|
85
|
+
## Special environments
|
86
|
+
|
87
|
+
### Heroku
|
88
|
+
|
89
|
+
Nothing special to setup. But if you use a hobby dyno and it falls to sleep, so will Arask. As soon as the dyno wakes up, Arask will run any pending jobs.
|
90
|
+
|
91
|
+
### Docker
|
92
|
+
|
93
|
+
Nothing special to setup.
|
77
94
|
|
78
95
|
## Caveats
|
96
|
+
|
79
97
|
If you reload a database dump, your jobs could be run again.
|
80
98
|
|
81
99
|
## Contributing
|
100
|
+
|
82
101
|
Please use https://github.com/Ebbe/arask
|
83
102
|
|
103
|
+
## Running tests
|
104
|
+
|
105
|
+
```bash
|
106
|
+
$ bundle install
|
107
|
+
$ bundle exec rake test
|
108
|
+
```
|
109
|
+
|
84
110
|
## License
|
111
|
+
|
85
112
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/arask.rb
CHANGED
@@ -5,29 +5,44 @@ require "arask/setup"
|
|
5
5
|
require 'fugit' # To parse cron
|
6
6
|
|
7
7
|
module Arask
|
8
|
-
class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from, :exception_block; end
|
8
|
+
class << self; attr_accessor :jobs_touched, :exception_email, :exception_email_from, :exception_block, :jobs_block; end
|
9
9
|
|
10
|
-
def self.setup
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
10
|
+
def self.setup(force_run = false, &block)
|
11
|
+
Arask.jobs_block = block
|
12
|
+
if Rails::VERSION::MAJOR>=6
|
13
|
+
# Make sure we only run setup now if we are testing.
|
14
|
+
# Else we would run them at every cli execution.
|
15
|
+
# railtie.rb inits the jobs when the server is ready
|
16
|
+
Arask.init_jobs if force_run
|
17
|
+
else # Rails is less than 6
|
18
|
+
|
19
|
+
# Make sure we only run setup if Rails is actually run as a server or testing.
|
20
|
+
return unless defined?(Rails::Server) or force_run
|
21
|
+
# If we don't wait and rails is setup to use another language, ActiveJob
|
22
|
+
# saves what is now (usually :en) and reloads that when trying to run the
|
23
|
+
# job. Renderering an I18n error of unsupported language.
|
24
|
+
ActiveSupport.on_load :after_initialize, yield: true do
|
25
|
+
Arask.init_jobs
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
30
|
+
def self.init_jobs
|
31
|
+
Arask.jobs_touched = []
|
32
|
+
Arask.jobs_block.call(Setup)
|
33
|
+
Arask.jobs_block = nil
|
34
|
+
begin
|
35
|
+
AraskJob.all.where.not(id: Arask.jobs_touched).delete_all
|
36
|
+
Arask.jobs_touched = nil
|
37
|
+
Arask.queue_self
|
38
|
+
rescue
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
27
42
|
def self.queue_self
|
28
43
|
begin
|
29
44
|
next_job_run = AraskJob.order(execute_at: :asc).first.try(:execute_at)
|
30
|
-
# At least check database for jobs every
|
45
|
+
# At least check database for jobs every day
|
31
46
|
next_job_run = 1.day.from_now if next_job_run.nil? or (next_job_run - DateTime.now)/60/60 > 24
|
32
47
|
RunJobs.set(wait_until: next_job_run).perform_later
|
33
48
|
rescue
|
data/lib/arask/initialize.rb
CHANGED
data/lib/arask/railtie.rb
CHANGED
data/lib/arask/version.rb
CHANGED
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arask
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Esben Damgaard
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.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: '5.
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fugit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
|
94
|
-
rubygems_version: 2.6.11
|
93
|
+
rubygems_version: 3.2.15
|
95
94
|
signing_key:
|
96
95
|
specification_version: 4
|
97
96
|
summary: Automatic RAils taSKs (with minimal setup)
|