ruby-clock 0.8.0.rc1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 77de35a13a23a83386d574ebc2ff0e71777f65b3612a9a444afd4f9ea69286bf
4
- data.tar.gz: 95cec8207417b487dfb81fb20b9cc8147bd90200efb009cc56a8c023773979bf
3
+ metadata.gz: bb7709e5cb45330de5b30adb906cc15e847207894a2ad71b3afd706ea0235f09
4
+ data.tar.gz: 9ab66e406ada9646d83f28806c07018641953b7b56f8824b49e14b3bd2ad2b7c
5
5
  SHA512:
6
- metadata.gz: a5585b7af51d706ffcbac3b88881c9b9c189dbc80e08867feea9ecef690dfd04957593504415bffde2c2022f69c1afdb0b30472f2466baa6bfc0dfad1264855d
7
- data.tar.gz: b1a9aa07dfcaaf28f8d953c88f9ccc467ac199376dce674bff1b3fac7aef3a01416dd9638a40d5fd28ae23932d56e1f56b74888fdb485c4dce3dd9fa6ed579aa
6
+ metadata.gz: d14858bb6c936e07e66527c9f670d68e236d56ccce407da9c5472334748a3b3f07012f82ff827fb314557b318a555a0e50ff9914b36330fe9cbd7c271da76532
7
+ data.tar.gz: '033369b93174cdba782d21fa150f63f521bf058d9ef6a654fbb54fd53e2b529f753350b5e086aa2b7e5df2cd0647cf9f932aceb6aaeabba892727dfb978ed1a8'
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ Gemfile.lock
1
2
  /.bundle/
2
3
  /.yardoc
3
4
  /_yardoc/
data/CHANGELOG.md CHANGED
@@ -1,10 +1,12 @@
1
- ## 0.8.0 RC1
1
+ ## 1.0.0
2
2
 
3
- * fixed rare error when calculating job identifier
4
- * nicer shutdown logging, indicating when shutdown process begins and ends
3
+ * make terrapin and posix-spawn gems optional
4
+ * fix detection of Rails constant, for non-rails apps
5
+ * automatically wrap jobs with rails reloader
5
6
  * ability to run rake tasks
6
7
  * ability to run shell commands
7
- * automatically wrap jobs with rails reloader
8
+ * nicer shutdown logging, indicating when shutdown process begins and ends
9
+ * fix approach for error fallbacks when when calculating job identifier (probably never encountered)
8
10
 
9
11
  ## 0.7.0
10
12
 
data/README.md CHANGED
@@ -12,8 +12,8 @@ ruby-clock does.
12
12
 
13
13
  Jobs are all run in their own parallel threads within the same process.
14
14
 
15
- The clock process will respond to signals INT (^c at the command line) and
16
- TERM (signal sent by environments such as Heroku and other PaaS's when shutting down).
15
+ The clock process will respond to signals `INT` (<kbd>^c</kbd> at the command line) and
16
+ `TERM` (signal sent by environments such as Heroku and other PaaS's when shutting down).
17
17
  In both cases, the clock will stop running jobs and give existing jobs 29 seconds
18
18
  to stop before killing them.
19
19
  You can change this number with `RUBY_CLOCK_SHUTDOWN_WAIT_SECONDS` in the environment.
@@ -75,7 +75,22 @@ To get smarter database connection management (such as in the case of a database
75
75
  and maybe other benefits) and code reloading in dev (app code, not the code in Clockfile itself),
76
76
  jobs are automatically wrapped in the
77
77
  [rails app reloader](https://guides.rubyonrails.org/threading_and_code_execution.html).
78
+ This [may incur a performance impact for certain jobs](https://github.com/rails/rails/issues/43504),
79
+ I'm still exploring this.
78
80
 
81
+ #### ActiveRecord Query Cache
82
+
83
+ You may wish to
84
+ [turn off the ActiveRecord Query Cache](https://code.jjb.cc/turning-off-activerecord-query-cache-to-improve-memory-consumption-in-background-jobs)
85
+ for your jobs. You can do so with the around trigger:
86
+
87
+ ```ruby
88
+ def schedule.around_trigger(job)
89
+ ActiveRecord::Base.uncached do
90
+ yield
91
+ end
92
+ end
93
+ ```
79
94
 
80
95
  ### Non-Rails
81
96
 
@@ -108,6 +123,14 @@ thing_reporter: bundle exec rails runner bin/clock clocks/thing_reporter.rb
108
123
 
109
124
  Because of this feature, do I regret using "Clockfile" instead of, say, "clock.rb"? Maybe.
110
125
 
126
+ #### Observing logs
127
+
128
+ Because STDOUT does not flush until a certain amount of data has gone into it,
129
+ you might not immediately see the ruby-clock startup message or job output if
130
+ viewing logs in a deployed environment such as Heroku where the logs are redirected
131
+ to another process or file. To change this behavior and have logs flush immediately,
132
+ add `$stdout.sync = true` to the top of your Clockfile.
133
+
111
134
 
112
135
  ## More Config and Capabilities
113
136
 
@@ -130,9 +153,7 @@ to learn how to do this. Where the documentation references `s`, you should use
130
153
 
131
154
  ### Shell commands
132
155
 
133
- You can run shell commands in your jobs. They are invoked using
134
- [posix-spawn](https://github.com/rtomayko/posix-spawn), which means
135
- the ruby process is not forked.
156
+ You can run shell commands in your jobs.
136
157
 
137
158
  ```ruby
138
159
  schedule.every '1 day' do
@@ -140,9 +161,14 @@ schedule.every '1 day' do
140
161
  end
141
162
  ```
142
163
 
143
- `shell` is a very simple convenience method which is implemented with
144
- [terrapin](https://github.com/thoughtbot/terrapin). If you want to use other terrapin
145
- features you can do so:
164
+ By default they will be run with
165
+ [ruby backticks](https://livebook.manning.com/concept/ruby/backtick).
166
+ For better performance, install the [terrapin](https://github.com/thoughtbot/terrapin)
167
+ and [posix-spawn](https://github.com/rtomayko/posix-spawn) gems.
168
+
169
+ `shell` is a convenience method which just passes the string on.
170
+ If you want to use other terrapin features, you can skip the `shell` command
171
+ and use terrapin directly:
146
172
 
147
173
  ```ruby
148
174
  schedule.every '1 day' do
@@ -154,6 +180,22 @@ schedule.every '1 day' do
154
180
  end
155
181
  ```
156
182
 
183
+ #### shutdown behavior
184
+
185
+ Because of [this](https://stackoverflow.com/questions/69653842/),
186
+ if a shell job is running during shutdown, shutdown behavior seems to be changed
187
+ for _all_ running jobs - they no longer are allowed to finish within the timeout period.
188
+ Everything exits immediately.
189
+
190
+ Until this is figured out, if you are concerned about jobs exiting inelegantly,
191
+ you may want to run your shell jobs in their own separate clock process.
192
+
193
+ ```
194
+ bundle exec rails runner bin/clock clocks/main_jobs.rb
195
+ bundle exec rails runner bin/clock clocks/shell_jobs.rb
196
+ ```
197
+
198
+
157
199
  ### Rake tasks
158
200
 
159
201
  You can run tasks from within the persistent runtime of ruby-clock, without
@@ -0,0 +1 @@
1
+ Clockfile linguist-language=Ruby
@@ -0,0 +1,11 @@
1
+ def schedule.on_error(job, error)
2
+ raise error
3
+ end
4
+
5
+ schedule.every('2 seconds') do
6
+ puts "hello from a ruby-clock job"
7
+ end
8
+
9
+ schedule.every('2 seconds') do
10
+ shell 'say hello'
11
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem 'ruby-clock', path: '../'
6
+ # gem 'terrapin'
7
+ # gem 'posix-spawn'
@@ -1,16 +1,13 @@
1
1
  PATH
2
- remote: .
2
+ remote: ..
3
3
  specs:
4
- ruby-clock (0.8.0.rc1)
4
+ ruby-clock (0.8.0.rc3)
5
5
  method_source
6
- posix-spawn (~> 0.3.15)
7
6
  rufus-scheduler (~> 3.8)
8
- terrapin (~> 0.6)
9
7
 
10
8
  GEM
11
9
  remote: https://rubygems.org/
12
10
  specs:
13
- climate_control (0.2.0)
14
11
  concurrent-ruby (1.1.9)
15
12
  et-orbi (1.2.5)
16
13
  tzinfo
@@ -18,22 +15,17 @@ GEM
18
15
  et-orbi (~> 1.1, >= 1.1.8)
19
16
  raabro (~> 1.4)
20
17
  method_source (1.0.0)
21
- posix-spawn (0.3.15)
22
18
  raabro (1.4.0)
23
- rake (12.3.3)
24
19
  rufus-scheduler (3.8.0)
25
20
  fugit (~> 1.1, >= 1.1.6)
26
- terrapin (0.6.0)
27
- climate_control (>= 0.0.3, < 1.0)
28
21
  tzinfo (2.0.4)
29
22
  concurrent-ruby (~> 1.0)
30
23
 
31
24
  PLATFORMS
32
- ruby
25
+ arm64-darwin-20
33
26
 
34
27
  DEPENDENCIES
35
- rake (~> 12.0)
36
28
  ruby-clock!
37
29
 
38
30
  BUNDLED WITH
39
- 2.2.23
31
+ 2.2.28
@@ -0,0 +1,9 @@
1
+ This is a bare-bones example non-rails app to
2
+ help with dev and also as an example for users.
3
+
4
+ To run:
5
+
6
+ ```
7
+ bundle
8
+ bundle exec clock
9
+ ```
data/exe/clock CHANGED
@@ -25,7 +25,7 @@ schedule.pause
25
25
 
26
26
  load ARGV[0] || 'Clockfile'
27
27
 
28
- if ::Rails
28
+ if defined?(::Rails)
29
29
  schedule.instance_eval do
30
30
  @old_around_trigger = method :around_trigger
31
31
  def around_trigger(job)
@@ -1,3 +1,3 @@
1
1
  module RubyClock
2
- VERSION = "0.8.0.rc1"
2
+ VERSION = "1.0.0"
3
3
  end
data/lib/ruby-clock.rb CHANGED
@@ -42,7 +42,7 @@ module RubyClock
42
42
  puts <<~MESSAGE
43
43
  Because this is not a rails application, we do not know how to load your
44
44
  rake tasks. You can do this yourself at the top of your Clockfile if you want
45
- to run rake tasks from ruby-cron.
45
+ to run rake tasks from ruby-clock.
46
46
  MESSAGE
47
47
  end
48
48
  end
@@ -69,8 +69,41 @@ module RubyClock
69
69
  @rake_mutex.synchronize { rake_async(task) }
70
70
  end
71
71
 
72
+ def shell_runner
73
+ @shell_runner ||= begin
74
+ require 'terrapin'
75
+ require 'posix-spawn'
76
+
77
+ unless Terrapin::CommandLine.runner.class == Terrapin::CommandLine::PosixRunner
78
+ puts <<~MESSAGE
79
+
80
+ 🤷 terrapin and posix-spawn are installed, but for some reason terrapin is
81
+ not using posix-spawn as its runner.
82
+
83
+ MESSAGE
84
+ end
85
+
86
+ puts '🐆 Using terrapin for shell commands.'
87
+ :terrapin
88
+ rescue LoadError
89
+ puts <<~MESSAGE
90
+
91
+ 🦥 Using ruby backticks for shell commands.
92
+ For better performance, install the terrapin and posix-spawn gems.
93
+ See README.md for more info.
94
+
95
+ MESSAGE
96
+ :backticks
97
+ end
98
+ end
99
+
72
100
  def shell(command)
73
- Terrapin::CommandLine.new(command).run
101
+ case shell_runner
102
+ when :terrapin
103
+ Terrapin::CommandLine.new(command).run
104
+ when :backticks
105
+ `#{command}`
106
+ end
74
107
  end
75
108
 
76
109
  end
data/release.md CHANGED
@@ -1,3 +1,4 @@
1
1
  1. update lib/ruby-clock/version.rb
2
2
  2. update CHANGELOG.md
3
+ 3. commit and push to github
3
4
  3. `rake release`
data/ruby-clock.gemspec CHANGED
@@ -31,6 +31,4 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_dependency "rufus-scheduler", '~> 3.8'
33
33
  spec.add_dependency "method_source"
34
- spec.add_dependency "terrapin", '~> 0.6'
35
- spec.add_dependency "posix-spawn", '~> 0.3.15'
36
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-clock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0.rc1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Bachir
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-18 00:00:00.000000000 Z
11
+ date: 2022-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rufus-scheduler
@@ -38,35 +38,7 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: terrapin
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0.6'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.6'
55
- - !ruby/object:Gem::Dependency
56
- name: posix-spawn
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 0.3.15
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 0.3.15
69
- description:
41
+ description:
70
42
  email:
71
43
  - j@jjb.cc
72
44
  executables:
@@ -77,12 +49,16 @@ files:
77
49
  - ".gitignore"
78
50
  - CHANGELOG.md
79
51
  - Gemfile
80
- - Gemfile.lock
81
52
  - LICENSE.txt
82
53
  - README.md
83
54
  - Rakefile
84
55
  - bin/console
85
56
  - bin/setup
57
+ - example-app/.gitattributes
58
+ - example-app/Clockfile
59
+ - example-app/Gemfile
60
+ - example-app/Gemfile.lock
61
+ - example-app/README.md
86
62
  - exe/clock
87
63
  - lib/ruby-clock.rb
88
64
  - lib/ruby-clock/version.rb
@@ -94,7 +70,7 @@ licenses:
94
70
  metadata:
95
71
  homepage_uri: https://github.com/jjb/ruby-clock
96
72
  source_code_uri: https://github.com/jjb/ruby-clock
97
- post_install_message:
73
+ post_install_message:
98
74
  rdoc_options: []
99
75
  require_paths:
100
76
  - lib
@@ -105,12 +81,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
81
  version: 2.3.0
106
82
  required_rubygems_version: !ruby/object:Gem::Requirement
107
83
  requirements:
108
- - - ">"
84
+ - - ">="
109
85
  - !ruby/object:Gem::Version
110
- version: 1.3.1
86
+ version: '0'
111
87
  requirements: []
112
- rubygems_version: 3.2.23
113
- signing_key:
88
+ rubygems_version: 3.2.22
89
+ signing_key:
114
90
  specification_version: 4
115
91
  summary: A "clock" process for invoking ruby code within a persistent runtime
116
92
  test_files: []