capistrano-delayed_job 0.0.10 → 3.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2b95413e5274f5875c7b1f3e298018d3bb8cd8f9
4
+ data.tar.gz: 0d3b77d3f0a09e7c12d3e885eb0cc173ae23825f
5
+ SHA512:
6
+ metadata.gz: 158f213b44956c7b7be5e5852cdd98a5f1da1e144e6acf96f20e88b0d4efbe508731d4a8f3f8aa871ae1de82d2721aeb4220ad99c7f8fc93a3fdfac8a070d6f2
7
+ data.tar.gz: 5a7d97214d8b3ca2bf39732712c8348a606ef6afacd45faec4192b48496c3b61c0da4b3e15d6d6161db902b359b5e1becd848a13536dce7d25b18fe6c69b9d11
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
- gem "capistrano", ">= 2.15.5"
4
- gem 'capistrano-base_helper', ">= 0.0.11"
3
+ gem 'capistrano', '~> 3.4'
4
+ gem 'activesupport', '>= 3.0'
5
+ gem 'capistrano-monit_runit', '~> 3.0.1'
5
6
 
6
7
  group :development do
7
- gem "bundler", ">= 1.3.0"
8
- gem "jeweler", "~> 1.8.6"
8
+ gem 'bundler', '~> 1.7'
9
+ gem 'jeweler', '~> 2.0'
9
10
  end
data/Gemfile.lock CHANGED
@@ -1,69 +1,82 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- addressable (2.3.5)
4
+ activesupport (4.2.0)
5
+ i18n (~> 0.7)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.3, >= 0.3.4)
9
+ tzinfo (~> 1.1)
10
+ addressable (2.3.7)
5
11
  builder (3.2.2)
6
- capistrano (2.15.5)
7
- highline
8
- net-scp (>= 1.0.0)
9
- net-sftp (>= 2.0.0)
10
- net-ssh (>= 2.0.14)
11
- net-ssh-gateway (>= 1.1.0)
12
- capistrano-base_helper (0.0.11)
13
- capistrano (>= 2.15.5)
14
- faraday (0.8.8)
15
- multipart-post (~> 1.2.0)
16
- git (1.2.5)
17
- github_api (0.10.1)
18
- addressable
19
- faraday (~> 0.8.1)
20
- hashie (>= 1.2)
21
- multi_json (~> 1.4)
22
- nokogiri (~> 1.5.2)
12
+ capistrano (3.4.0)
13
+ i18n
14
+ rake (>= 10.0.0)
15
+ sshkit (~> 1.3)
16
+ capistrano-monit_runit (3.0.1)
17
+ activesupport (>= 3.0)
18
+ capistrano (~> 3.4)
19
+ colorize (0.7.5)
20
+ descendants_tracker (0.0.4)
21
+ thread_safe (~> 0.3, >= 0.3.1)
22
+ faraday (0.9.1)
23
+ multipart-post (>= 1.2, < 3)
24
+ git (1.2.9.1)
25
+ github_api (0.12.3)
26
+ addressable (~> 2.3)
27
+ descendants_tracker (~> 0.0.4)
28
+ faraday (~> 0.8, < 0.10)
29
+ hashie (>= 3.3)
30
+ multi_json (>= 1.7.5, < 2.0)
31
+ nokogiri (~> 1.6.3)
23
32
  oauth2
24
- hashie (2.0.5)
25
- highline (1.6.19)
26
- httpauth (0.2.0)
27
- jeweler (1.8.6)
33
+ hashie (3.4.0)
34
+ highline (1.7.1)
35
+ i18n (0.7.0)
36
+ jeweler (2.0.1)
28
37
  builder
29
- bundler (~> 1.0)
38
+ bundler (>= 1.0)
30
39
  git (>= 1.2.5)
31
- github_api (= 0.10.1)
40
+ github_api
32
41
  highline (>= 1.6.15)
33
- nokogiri (= 1.5.10)
42
+ nokogiri (>= 1.5.10)
34
43
  rake
35
44
  rdoc
36
- json (1.8.0)
37
- jwt (0.1.8)
38
- multi_json (>= 1.5)
39
- multi_json (1.7.7)
40
- multi_xml (0.5.4)
41
- multipart-post (1.2.0)
42
- net-scp (1.1.2)
45
+ json (1.8.2)
46
+ jwt (1.4.1)
47
+ mini_portile (0.6.2)
48
+ minitest (5.5.1)
49
+ multi_json (1.11.0)
50
+ multi_xml (0.5.5)
51
+ multipart-post (2.0.0)
52
+ net-scp (1.2.1)
43
53
  net-ssh (>= 2.6.5)
44
- net-sftp (2.1.2)
45
- net-ssh (>= 2.6.5)
46
- net-ssh (2.6.8)
47
- net-ssh-gateway (1.2.0)
48
- net-ssh (>= 2.6.5)
49
- nokogiri (1.5.10)
50
- oauth2 (0.9.2)
51
- faraday (~> 0.8)
52
- httpauth (~> 0.2)
53
- jwt (~> 0.1.4)
54
- multi_json (~> 1.0)
54
+ net-ssh (2.9.2)
55
+ nokogiri (1.6.6.2)
56
+ mini_portile (~> 0.6.0)
57
+ oauth2 (1.0.0)
58
+ faraday (>= 0.8, < 0.10)
59
+ jwt (~> 1.0)
60
+ multi_json (~> 1.3)
55
61
  multi_xml (~> 0.5)
56
62
  rack (~> 1.2)
57
- rack (1.5.2)
58
- rake (10.1.0)
59
- rdoc (4.0.1)
60
- json (~> 1.4)
63
+ rack (1.6.0)
64
+ rake (10.4.2)
65
+ rdoc (4.2.0)
66
+ sshkit (1.7.1)
67
+ colorize (>= 0.7.0)
68
+ net-scp (>= 1.1.2)
69
+ net-ssh (>= 2.8.0)
70
+ thread_safe (0.3.5)
71
+ tzinfo (1.2.2)
72
+ thread_safe (~> 0.1)
61
73
 
62
74
  PLATFORMS
63
75
  ruby
64
76
 
65
77
  DEPENDENCIES
66
- bundler (>= 1.3.0)
67
- capistrano (>= 2.15.5)
68
- capistrano-base_helper (>= 0.0.11)
69
- jeweler (~> 1.8.6)
78
+ activesupport (>= 3.0)
79
+ bundler (~> 1.7)
80
+ capistrano (~> 3.4)
81
+ capistrano-monit_runit (~> 3.0.1)
82
+ jeweler (~> 2.0)
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Leif Ringstad
1
+ Copyright (c) 2013-2015 Leif Ringstad
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -2,20 +2,35 @@
2
2
 
3
3
  This gem provides recipes for [Delayed Job](https://github.com/collectiveidea/delayed_job) to setup [runit](smarden.org/runit/) and [monit](http://mmonit.com/monit)
4
4
 
5
+ ## Versioning
6
+
7
+ Use 3.x for capistrano 3
8
+
9
+ For capistrano2, see the capistrano2 branch (will not be updated)
10
+
5
11
  ## Usage
6
12
 
7
13
  Add it to your Gemfile without requiring it
8
14
 
9
15
  ```ruby
10
- gem 'capistrano-delayed_job', :require => false
16
+ gem 'capistrano-delayed_job', require: false
11
17
  ```
12
18
 
13
- In your deploy.rb:
19
+ Now run ```bundle install```
20
+
21
+ Add this to your Capfile:
14
22
 
15
23
  ```ruby
16
24
  require 'capistrano/delayed_job'
17
25
  ```
18
26
 
27
+ Create a new file in in /etc/sudoers.d/ and add the output of the following commands:
28
+
29
+ ```
30
+ cap production runit:sudoers
31
+ cap production monit:sudoers
32
+ ```
33
+
19
34
  ### Monit
20
35
 
21
36
  ```
data/Rakefile CHANGED
@@ -6,7 +6,7 @@ begin
6
6
  Bundler.setup(:default, :development)
7
7
  rescue Bundler::BundlerError => e
8
8
  $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
9
+ $stderr.puts 'Run `bundle install` to install missing gems'
10
10
  exit e.status_code
11
11
  end
12
12
  require 'rake'
@@ -14,24 +14,26 @@ require 'rake'
14
14
  require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "capistrano-delayed_job"
18
- gem.homepage = "https://github.com/leifcr/capistrano-delayed_job"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Capistrano recipes for Delayed Job using runit and monit}
21
- gem.description = %Q{Capistrano recipes for Delayed Job using runit and monit.}
22
- gem.email = "leifcr@gmail.com"
23
- gem.authors = ["Leif Ringstad"]
24
- gem.files.exclude ".ruby-*"
17
+ gem.name = 'capistrano-delayed_job'
18
+ gem.homepage = 'https://github.com/leifcr/capistrano-delayed_job'
19
+ gem.license = 'MIT'
20
+ gem.summary = 'Capistrano recipes for Delayed Job using runit and monit'
21
+ gem.description = 'Capistrano recipes for Delayed Job using runit and monit.'
22
+ gem.email = 'leifcr@gmail.com'
23
+ gem.authors = ['Leif Ringstad']
24
+ gem.files.exclude '.ruby-*'
25
+ gem.files.exclude '*.sublime-project'
26
+ gem.files.exclude '.rubocop.yml'
25
27
  # dependencies defined in Gemfile
26
28
  end
27
29
  Jeweler::RubygemsDotOrgTasks.new
28
30
 
29
31
  # require 'rdoc/task'
30
32
  # Rake::RDocTask.new do |rdoc|
31
- # version = File.exist?('VERSION') ? File.read('VERSION') : ""
33
+ # version = File.exist?('VERSION') ? File.read('VERSION') : ''
32
34
 
33
35
  # rdoc.rdoc_dir = 'rdoc'
34
- # rdoc.title = "capistrano-empty #{version}"
36
+ # rdoc.title = 'capistrano-empty #{version}'
35
37
  # rdoc.rdoc_files.include('README*')
36
38
  # rdoc.rdoc_files.include('lib/**/*.rb')
37
- # end
39
+ # end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.10
1
+ 3.0.0
@@ -2,14 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: capistrano-delayed_job 3.0.0 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
8
  s.name = "capistrano-delayed_job"
8
- s.version = "0.0.10"
9
+ s.version = "3.0.0"
9
10
 
10
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
11
13
  s.authors = ["Leif Ringstad"]
12
- s.date = "2013-08-02"
14
+ s.date = "2015-03-26"
13
15
  s.description = "Capistrano recipes for Delayed Job using runit and monit."
14
16
  s.email = "leifcr@gmail.com"
15
17
  s.extra_rdoc_files = [
@@ -25,39 +27,44 @@ Gem::Specification.new do |s|
25
27
  "VERSION",
26
28
  "capistrano-delayed_job.gemspec",
27
29
  "lib/capistrano/delayed_job.rb",
28
- "lib/capistrano/delayed_job/config.rb",
29
- "lib/capistrano/delayed_job/monit.rb",
30
- "lib/capistrano/delayed_job/runit.rb",
30
+ "lib/capistrano/helpers/delayed_job/monit.rb",
31
+ "lib/capistrano/helpers/delayed_job/runit.rb",
32
+ "lib/capistrano/helpers/delayed_job/template_paths.rb",
33
+ "lib/capistrano/tasks/config.rake",
34
+ "lib/capistrano/tasks/monit.rake",
35
+ "lib/capistrano/tasks/runit.rake",
31
36
  "templates/monit/delayed_job.conf.erb",
32
37
  "templates/runit/finish.erb",
33
- "templates/runit/log-run.erb",
38
+ "templates/runit/log/run.erb",
34
39
  "templates/runit/run.erb"
35
40
  ]
36
41
  s.homepage = "https://github.com/leifcr/capistrano-delayed_job"
37
42
  s.licenses = ["MIT"]
38
- s.require_paths = ["lib"]
39
- s.rubygems_version = "1.8.25"
43
+ s.rubygems_version = "2.4.6"
40
44
  s.summary = "Capistrano recipes for Delayed Job using runit and monit"
41
45
 
42
46
  if s.respond_to? :specification_version then
43
- s.specification_version = 3
47
+ s.specification_version = 4
44
48
 
45
49
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
- s.add_runtime_dependency(%q<capistrano>, [">= 2.15.5"])
47
- s.add_runtime_dependency(%q<capistrano-base_helper>, [">= 0.0.11"])
48
- s.add_development_dependency(%q<bundler>, [">= 1.3.0"])
49
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.6"])
50
+ s.add_runtime_dependency(%q<capistrano>, ["~> 3.4"])
51
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
52
+ s.add_runtime_dependency(%q<capistrano-monit_runit>, ["~> 3.0.1"])
53
+ s.add_development_dependency(%q<bundler>, ["~> 1.7"])
54
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
50
55
  else
51
- s.add_dependency(%q<capistrano>, [">= 2.15.5"])
52
- s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.11"])
53
- s.add_dependency(%q<bundler>, [">= 1.3.0"])
54
- s.add_dependency(%q<jeweler>, ["~> 1.8.6"])
56
+ s.add_dependency(%q<capistrano>, ["~> 3.4"])
57
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
58
+ s.add_dependency(%q<capistrano-monit_runit>, ["~> 3.0.1"])
59
+ s.add_dependency(%q<bundler>, ["~> 1.7"])
60
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
55
61
  end
56
62
  else
57
- s.add_dependency(%q<capistrano>, [">= 2.15.5"])
58
- s.add_dependency(%q<capistrano-base_helper>, [">= 0.0.11"])
59
- s.add_dependency(%q<bundler>, [">= 1.3.0"])
60
- s.add_dependency(%q<jeweler>, ["~> 1.8.6"])
63
+ s.add_dependency(%q<capistrano>, ["~> 3.4"])
64
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
65
+ s.add_dependency(%q<capistrano-monit_runit>, ["~> 3.0.1"])
66
+ s.add_dependency(%q<bundler>, ["~> 1.7"])
67
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
61
68
  end
62
69
  end
63
70
 
@@ -2,10 +2,12 @@ def try_require(library)
2
2
  begin
3
3
  require "#{library}"
4
4
  rescue LoadError => e
5
- puts "Capistrano-Delayed Job: Cannot load library: #{library} Error: #{e}"
5
+ puts "Capistrano-DelayedJob: Cannot load library: #{library} Error: #{e}"
6
6
  end
7
7
  end
8
8
 
9
- try_require 'capistrano/delayed_job/config'
10
- try_require 'capistrano/delayed_job/runit'
11
- try_require 'capistrano/delayed_job/monit'
9
+ try_require 'capistrano/monit'
10
+ try_require 'capistrano/runit'
11
+ load File.expand_path('../tasks/config.rake', __FILE__)
12
+ load File.expand_path('../tasks/monit.rake', __FILE__)
13
+ load File.expand_path('../tasks/runit.rake', __FILE__)
@@ -0,0 +1,38 @@
1
+ module Capistrano
2
+ module Helpers
3
+ module DelayedJob
4
+ ##
5
+ # Module Monit provides helpers for Monit/Puma combination
6
+ ##
7
+ module Monit
8
+ module_function
9
+
10
+ def delayed_job_pid_file(worker_number)
11
+ service_pid("#{fetch(:delayed_job_runit_base_service_name)}_#{worker_number}")
12
+ end
13
+
14
+ def delayed_job_monit_service_name(worker_number)
15
+ "#{fetch(:delayed_job_monit_base_service_name)}_#{worker_number}"
16
+ end
17
+
18
+ def delayed_job_monit_start_command(worker_number)
19
+ "/bin/bash -c '[ ! -h #{runit_service_path(delayed_job_monit_service_name(worker_number))}/run ] || /usr/bin/sv start #{runit_service_path(delayed_job_monit_service_name(worker_number))}'" # rubocop:disable Metrics/LineLength
20
+ end
21
+
22
+ def delayed_job_monit_stop_command(worker_number)
23
+ # Give delayed job 60 seconds to finish any jobs it's currently handling.
24
+ # (Tasks that are longer than 60 seconds should be split!)
25
+ "/usr/bin/sv -w 60 force-stop #{runit_service_path(delayed_job_monit_service_name(worker_number))}" # rubocop:disable Metrics/LineLength
26
+ end
27
+
28
+ def available_configuration_with_path(worker_number)
29
+ File.join(fetch(:monit_available_path), "#{fetch(:delayed_job_runit_base_service_name)}_#{worker_number}.conf")
30
+ end
31
+
32
+ def available_configuration_file(worker_number)
33
+ "#{fetch(:delayed_job_runit_base_service_name)}_#{worker_number}.conf"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,28 @@
1
+ module Capistrano
2
+ module Helpers
3
+ module DelayedJob
4
+ ##
5
+ # Module Monit provides helpers for Monit/Puma combination
6
+ ##
7
+ module Runit
8
+ module_function
9
+
10
+ def delayed_job_runit_service_name(worker_number)
11
+ "#{fetch(:delayed_job_runit_base_service_name)}_#{worker_number}"
12
+ end
13
+
14
+ def delayed_job_log_path(worker_number)
15
+ runit_var_log_service_single_service_path(delayed_job_runit_service_name(worker_number))
16
+ end
17
+
18
+ def available_configuration_with_path(worker_number)
19
+ File.join(fetch(:monit_available_path), "#{fetch(:delayed_job_runit_service_name)}_#{worker_number}.conf")
20
+ end
21
+
22
+ def available_configuration_file(worker_number)
23
+ "#{fetch(:delayed_job_runit_service_name)}_#{worker_number}.conf"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module Capistrano
2
+ module Helpers
3
+ module DelayedJob
4
+ ##
5
+ # Paths for templates
6
+ #
7
+ module TemplatePaths
8
+ module_function
9
+
10
+ def template_base_path
11
+ File.expand_path(File.join(File.dirname(__FILE__), '../../../../templates'))
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ require 'capistrano/helpers/base'
2
+ require 'capistrano/helpers/delayed_job/template_paths'
3
+ include Capistrano::Helpers::Base
4
+
5
+ namespace :load do
6
+ task :defaults do
7
+ set :delayed_job_runit_base_service_name, 'delayed_job'
8
+
9
+ # The number of workers to run
10
+ # Will create X number of runit services/monit monitors.
11
+ # Remember to purge/remove config before changing this value down
12
+ # Default to 2 workers
13
+ set :delayed_job_workers, 2
14
+
15
+ # The binary to trigger delayed job
16
+ set :delayed_job_bin, 'bundle exec rake jobs:work'
17
+
18
+ # runit defaults
19
+ set :delayed_job_restart_interval, proc { fetch(:runit_restart_interval) }
20
+ set :delayed_job_restart_count, proc { fetch(:runit_restart_count) }
21
+ set :delayed_job_autorestart_clear_interval, proc { fetch(:runit_autorestart_clear_interval) }
22
+
23
+ # runit templates
24
+ set :delayed_job_runit_run_template, File.join(Capistrano::Helpers::DelayedJob::TemplatePaths.template_base_path, 'runit', 'run.erb') # rubocop:disable Metrics/LineLength
25
+ set :delayed_job_runit_finish_template, File.join(Capistrano::Helpers::DelayedJob::TemplatePaths.template_base_path, 'runit', 'finish.erb') # rubocop:disable Metrics/LineLength
26
+ set :delayed_job_runit_log_run_template, File.join(Capistrano::Helpers::DelayedJob::TemplatePaths.template_base_path, 'runit', 'log', 'run.erb') # rubocop:disable Metrics/LineLength
27
+
28
+ # monit configuration
29
+ set :delayed_job_monit_base_service_name, proc { "#{user_app_env_underscore}_delayed_job" }
30
+ # Each worker would be likely to use at least 60-70mb ram for an app with many gems
31
+ set :delayed_job_monit_memory_alert_threshold, '100.0 MB for 2 cycles'
32
+ # Give the delayed_job_workers some headroom
33
+ set :delayed_job_monit_memory_restart_threshold, '150.0 MB for 3 cycles'
34
+ set :delayed_job_monit_cpu_alert_threshold, '90% for 2 cycles'
35
+ set :delayed_job_monit_cpu_restart_threshold, '95% for 5 cycles'
36
+
37
+ set :delayed_job_monit_config_template, File.join(Capistrano::Helpers::DelayedJob::TemplatePaths.template_base_path, 'monit', 'delayed_job.conf.erb') # rubocop:disable Metrics/LineLength
38
+
39
+ set :monit_application_delayed_job_group_name, proc { "#{user_app_env_underscore}_delayed_job" }
40
+ end
41
+ end
@@ -0,0 +1,81 @@
1
+ require 'capistrano/dsl/base_paths'
2
+ require 'capistrano/dsl/runit_paths'
3
+ require 'capistrano/helpers/base'
4
+ require 'capistrano/helpers/monit'
5
+ require 'capistrano/helpers/delayed_job/monit'
6
+ include Capistrano::DSL::BasePaths
7
+ include Capistrano::DSL::RunitPaths
8
+ include Capistrano::Helpers::Base
9
+ include Capistrano::Helpers::Monit
10
+ include Capistrano::Helpers::DelayedJob::Monit
11
+
12
+ namespace :delayed_job do
13
+ namespace :monit do
14
+ desc 'MONIT: Setup Delayed Job service'
15
+ task :setup do
16
+ on roles(:app) do |host|
17
+ (1..fetch(:delayed_job_workers)).each do |n|
18
+ info "MONIT: Uploading configuration for Delayed Job worker #{n} for #{fetch(:application)} on #{host}"
19
+ # Upload configuration
20
+ set :tmp_delayed_job_monit_service_name, delayed_job_monit_service_name(n)
21
+ set :tmp_worker_number, n
22
+ set :tmp_delayed_job_pid_file, delayed_job_pid_file(n)
23
+ upload! template_to_s_io(fetch(:delayed_job_monit_config_template)), available_configuration_with_path(n)
24
+ end
25
+ end
26
+ end
27
+
28
+ desc 'MONIT: Enable services for Delayed Job'
29
+ task :enable do
30
+ on roles(:app) do |host|
31
+ (1..fetch(:delayed_job_workers)).each do |n|
32
+ info "MONIT: Enabling service for Delayed Job worker #{n} for #{fetch(:application)} on #{host}"
33
+ enable_monitor(available_configuration_file(n))
34
+ end
35
+ end
36
+ end
37
+
38
+ desc 'MONIT: Disable and Stop services for Delayed Job'
39
+ task :disable do
40
+ on roles(:app) do |host|
41
+ (1..fetch(:delayed_job_workers)).each do |n|
42
+ info "MONIT: Disabling service for Delayed Job worker #{n} for #{fetch(:application)} on #{host}"
43
+ disable_monitor(available_configuration_file(n))
44
+ end
45
+ end
46
+ end
47
+
48
+ %w(start stop restart monitor unmonitor).each do |cmd|
49
+ desc "MONIT: #{cmd.capitalize} Delayed Job"
50
+ task cmd.to_sym do
51
+ on roles(:app) do |host|
52
+ (1..fetch(:delayed_job_workers)).each do |n|
53
+ info "MONIT: #{cmd} Delayed Job worker #{n} for #{fetch(:application)} on #{host}"
54
+ command_monit(cmd, available_configuration_file(n))
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ desc 'MONIT: Purge Delayed Job configuration'
61
+ task :purge do
62
+ on roles(:app) do |host|
63
+ (1..fetch(:delayed_job_workers)).each do |n|
64
+ info "MONIT: Purging config for Delayed Job worker #{n} for #{fetch(:application)} on #{host}"
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
71
+ after 'monit:setup', 'delayed_job:monit:setup'
72
+ # after 'delayed_job:monit:setup', 'delayed_job:monit:enable'
73
+ after 'delayed_job:monit:enable', 'monit:reload'
74
+
75
+ before 'delayed_job:monit:disable', 'delayed_job:monit:unmonitor'
76
+ after 'delayed_job:monit:disable', 'monit:reload'
77
+
78
+ # start service after update in case it has not been stopped
79
+ # This shouldn't be necessary, as monit should pick up a non-running service.
80
+ # Starting it here might trigger double starting if monit is triggered simultaniously.
81
+ # after "deploy:update", "delayed_job:monit:start"
@@ -0,0 +1,149 @@
1
+ require 'capistrano/dsl/base_paths'
2
+ require 'capistrano/dsl/runit_paths'
3
+ require 'capistrano/helpers/base'
4
+ require 'capistrano/helpers/runit'
5
+ require 'capistrano/helpers/delayed_job/runit'
6
+
7
+ include Capistrano::DSL::BasePaths
8
+ include Capistrano::DSL::RunitPaths
9
+ include Capistrano::Helpers::Base
10
+ include Capistrano::Helpers::Runit
11
+ include Capistrano::Helpers::DelayedJob::Runit
12
+
13
+ # require 'capistrano/runit'
14
+ namespace :delayed_job do
15
+ desc 'Setup Delayed Job configuration'
16
+ task :setup do
17
+ on roles(:app) do
18
+ execute :mkdir, "-p #{fetch(:sockets_path)}" if test("[ ! -d '#{fetch(:sockets_path)}' ]")
19
+ upload! template_to_s_io(fetch(:puma_config_template)), fetch(:puma_config_file)
20
+ end
21
+ end
22
+
23
+ namespace :runit do
24
+ desc 'Setup Delayed Job runit-service'
25
+ task :setup do
26
+ on roles(:app) do
27
+ (1..fetch(:delayed_job_workers)).each do |n|
28
+ # Create runit config
29
+ if test("[ ! -d '#{runit_service_path(delayed_job_runit_service_name(n))}' ]")
30
+ execute :mkdir, "-p '#{runit_service_path(delayed_job_runit_service_name(n))}'"
31
+ end
32
+
33
+ set :tmp_delayed_job_runit_service_name, delayed_job_runit_service_name(n)
34
+ set :tmp_worker_number, n
35
+
36
+ upload! template_to_s_io(fetch(:delayed_job_runit_run_template)), runit_service_run_config_file(delayed_job_runit_service_name(n)) # rubocop:disable Metrics/LineLength
37
+ upload! template_to_s_io(fetch(:delayed_job_runit_finish_template)), runit_service_finish_config_file(delayed_job_runit_service_name(n)) # rubocop:disable Metrics/LineLength
38
+
39
+ # Log scripts for runit service
40
+ if test("[ ! -d '#{runit_service_log_path(delayed_job_runit_service_name(n))}' ]")
41
+ execute :mkdir, "-p '#{runit_service_log_path(delayed_job_runit_service_name(n))}'"
42
+ end
43
+
44
+ set :tmp_delayed_job_log_path, delayed_job_log_path(n)
45
+
46
+ upload! template_to_s_io(fetch(:delayed_job_runit_log_run_template)), runit_service_log_run_file(delayed_job_runit_service_name(n)) # rubocop:disable Metrics/LineLength
47
+
48
+ # Make scripts executable
49
+ runit_set_executable_files(delayed_job_runit_service_name(n))
50
+
51
+ # Create log paths for the service
52
+ if test("[ ! -d '#{runit_var_log_service_single_service_path(delayed_job_runit_service_name(n))}' ]")
53
+ execute :mkdir, "-p '#{runit_var_log_service_single_service_path(delayed_job_runit_service_name(n))}'"
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ desc 'Enable Delayed Job runit-services'
60
+ task :enable do
61
+ on roles(:app) do
62
+ (1..fetch(:delayed_job_workers)).each do |n|
63
+ enable_service(delayed_job_runit_service_name(n))
64
+ end
65
+ end
66
+ end
67
+
68
+ desc 'Disable Delayed Job runit-services'
69
+ task :disable do
70
+ on roles(:app) do
71
+ (1..fetch(:delayed_job_workers)).each do |n|
72
+ disable_service(delayed_job_runit_service_name(n))
73
+ end
74
+ end
75
+ end
76
+
77
+ desc 'Start Delayed Job runit-services'
78
+ task :start do
79
+ on roles(:app) do
80
+ (1..fetch(:delayed_job_workers)).each do |n|
81
+ control_service(delayed_job_runit_service_name(n), 'start')
82
+ end
83
+ end
84
+ end
85
+
86
+ desc 'Start Delayed Job runit-services only ONCE (no supervision...)'
87
+ task :once do
88
+ on roles(:app) do
89
+ (1..fetch(:delayed_job_workers)).each do |n|
90
+ control_service(delayed_job_runit_service_name(n), 'once')
91
+ end
92
+ end
93
+ end
94
+
95
+ desc 'Stop Delayed Job runit-services'
96
+ # :on_error => :continue should be added when cap3 equivalent has been figured out
97
+ task :stop do
98
+ on roles(:app) do
99
+ # will wait 45 seconds for delayed job to shut down/finish current jobs, to allow it to
100
+ # Process ongoing tasks.
101
+ (1..fetch(:delayed_job_workers)).each do |n|
102
+ begin
103
+ control_service(delayed_job_runit_service_name(n), 'force-stop', '-w 45')
104
+ rescue
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ desc 'Quit the Delayed Job runit-services'
111
+ # :on_error => :continue should be added when cap3 equivalent has been figured out
112
+ task :quit do
113
+ on roles(:app) do
114
+ (1..fetch(:delayed_job_workers)).each do |n|
115
+ control_service(delayed_job_runit_service_name(n), 'quit')
116
+ end
117
+ end
118
+ end
119
+
120
+ desc 'Restart Delayed Job runit-services'
121
+ task :restart do
122
+ on roles(:app) do
123
+ (1..fetch(:delayed_job_workers)).each do |n|
124
+ control_service(delayed_job_runit_service_name(n), 'restart')
125
+ end
126
+ end
127
+ end
128
+
129
+ desc 'Purge Delayed Job runit configuration'
130
+ # :on_error => :continue should be added when cap3 equivalent has been figured out
131
+ task :purge do
132
+ on roles(:app) do
133
+ (1..fetch(:delayed_job_workers)).each do |n|
134
+ disable_service(delayed_job_runit_service_name(n))
135
+ purge_service(delayed_job_runit_service_name(n))
136
+ end
137
+ end
138
+ end
139
+ end
140
+ end
141
+
142
+ after 'runit:setup', 'delayed_job:runit:setup'
143
+
144
+ # enable service after update in case it has been disabled
145
+ # Service should probably be started as well?
146
+ after 'deploy:updated', 'delayed_job:runit:enable'
147
+ # before 'delayed_job:runit:setup', 'delayed_job:flush_sockets'
148
+ before 'delayed_job:runit:setup', 'delayed_job:setup'
149
+ before 'delayed_job:runit:quit', 'delayed_job:runit:stop'
@@ -1,16 +1,17 @@
1
- # Monit configuration for Delayed Job
2
- # <% c = Capistrano::BaseHelper::get_capistrano_instance %>
3
- # <%= "#{c.fetch(:application)} running as #{c.fetch(:user)} in environment #{Capistrano::BaseHelper.environment}" %>
1
+ # Monit configuration for:
2
+ # Delayed Job worker <%= fetch(:tmp_worker_number) %>
3
+ # Application: <%= "#{fetch(:application)} running as #{fetch(:user)} in environment #{environment}" %>
4
4
  #
5
- # Service name: <%= c.fetch(:delayed_job_monit_service_name) %>
5
+ # Service name: <%= fetch(:tmp_delayed_job_monit_service_name) %>
6
6
  #
7
- check process <%= c.fetch(:delayed_job_monit_service_name) %>
8
- with pidfile <%= c.fetch(:delayed_job_pid_file) %>
9
- start program = "<%= c.fetch(:delayed_job_monit_start_command) %>"
10
- stop program = "<%= c.fetch(:delayed_job_monit_stop_command) %>"
11
- <%= "if mem is greater than #{c.fetch(:delayed_job_monit_memory_alert_threshold)} then alert" unless c.fetch(:delayed_job_monit_memory_alert_threshold).nil? %>
12
- <%= "if mem is greater than #{c.fetch(:delayed_job_monit_memory_restart_threshold)} then restart" unless c.fetch(:delayed_job_monit_memory_restart_threshold).nil? %>
13
- <%= "if cpu is greater than #{c.fetch(:delayed_job_monit_cpu_alert_threshold)} then alert" unless c.fetch(:delayed_job_monit_cpu_alert_threshold).nil? %>
14
- <%= "if cpu is greater than #{c.fetch(:delayed_job_monit_cpu_restart_threshold)} then restart" unless c.fetch(:delayed_job_monit_cpu_restart_threshold).nil? %>
7
+ check process <%= fetch(:tmp_delayed_job_monit_service_name) %>
8
+ with pidfile <%= fetch(:tmp_delayed_job_pid_file) %>
9
+ start program = "<%= delayed_job_monit_start_command(fetch(:tmp_worker_number)) %>"
10
+ stop program = "<%= delayed_job_monit_stop_command(fetch(:tmp_worker_number)) %>"
11
+ <%= "if mem is greater than #{fetch(:delayed_job_monit_memory_alert_threshold)} then alert" unless fetch(:delayed_job_monit_memory_alert_threshold).nil? %>
12
+ <%= "if mem is greater than #{fetch(:delayed_job_monit_memory_restart_threshold)} then restart" unless fetch(:delayed_job_monit_memory_restart_threshold).nil? %>
13
+ <%= "if cpu is greater than #{fetch(:delayed_job_monit_cpu_alert_threshold)} then alert" unless fetch(:delayed_job_monit_cpu_alert_threshold).nil? %>
14
+ <%= "if cpu is greater than #{fetch(:delayed_job_monit_cpu_restart_threshold)} then restart" unless fetch(:delayed_job_monit_cpu_restart_threshold).nil? %>
15
15
 
16
- group <%= c.fetch(:monit_application_group_name) %>
16
+ group <%= fetch(:monit_application_delayed_job_group_name) %>
17
+ group <%= fetch(:monit_application_group_name) %>
@@ -1,17 +1,18 @@
1
1
  #!/bin/bash
2
2
  #
3
+ # Delayed_Job worker <%= fetch(:tmp_worker_number) %> running on <%= fetch(:application) %> running as <%= fetch(:user) %>
4
+ #
3
5
  # This finish file is originally from:
4
6
  # https://github.com/erwbgy/puppet-runit/blob/fde6006e6d400f0c99b6ff0b1b63094207dc8783/templates/service/finish.erb
5
7
  # Thanks to erwbgy!
6
8
  #
7
- # <% c = Capistrano::BaseHelper::get_capistrano_instance %>
8
9
  # Variable name setup
9
10
  <%
10
- exit_code = "EXIT_CODE_#{Capistrano::BaseHelper.user_app_env_underscore_short_char_safe}_#{c.fetch(:delayed_job_runit_service_name)}".upcase
11
- exit_status = "EXIT_STATUS_#{Capistrano::BaseHelper.user_app_env_underscore_short_char_safe}_#{c.fetch(:delayed_job_runit_service_name)}".upcase
12
- min_auto_restart_interval = "MIN_AUTO_RESTART_INTERVAL_#{Capistrano::BaseHelper.user_app_env_underscore_short_char_safe}_#{c.fetch(:delayed_job_runit_service_name)}".upcase
13
- max_auto_restart_count = "MAX_AUTO_RESTART_COUNT_#{Capistrano::BaseHelper.user_app_env_underscore_short_char_safe}_#{c.fetch(:delayed_job_runit_service_name)}".upcase
14
- auto_restart_count_clear_interval = "AUTO_RESTART_COUNT_CLEAR_INTERVAL_#{Capistrano::BaseHelper.user_app_env_underscore_short_char_safe}_#{c.fetch(:delayed_job_runit_service_name)}".upcase
11
+ exit_code = "EXIT_CODE_#{user_app_env_underscore_short_char_safe}_#{fetch(:tmp_delayed_job_runit_service_name)}".upcase
12
+ exit_status = "EXIT_STATUS_#{user_app_env_underscore_short_char_safe}_#{fetch(:tmp_delayed_job_runit_service_name)}".upcase
13
+ min_auto_restart_interval = "MIN_AUTO_RESTART_INTERVAL_#{user_app_env_underscore_short_char_safe}_#{fetch(:tmp_delayed_job_runit_service_name)}".upcase
14
+ max_auto_restart_count = "MAX_AUTO_RESTART_COUNT_#{user_app_env_underscore_short_char_safe}_#{fetch(:tmp_delayed_job_runit_service_name)}".upcase
15
+ auto_restart_count_clear_interval = "AUTO_RESTART_COUNT_CLEAR_INTERVAL_#{user_app_env_underscore_short_char_safe}_#{fetch(:tmp_delayed_job_runit_service_name)}".upcase
15
16
  %>
16
17
  #
17
18
  # The following variables are set by Runit:
@@ -52,14 +53,14 @@ auto_restart_count_clear_interval = "AUTO_RESTART_COUNT_CLEAR_INTERVAL_#{Capistr
52
53
  <%= "#{exit_status}" %>=$2
53
54
 
54
55
  # The minimum delay (in seconds) between automatic restarts
55
- <%= "#{min_auto_restart_interval}" %>=<%= c.fetch(:delayed_job_restart_interval) %>
56
+ <%= "#{min_auto_restart_interval}" %>=<%= fetch(:delayed_job_restart_interval) %>
56
57
 
57
58
  # The maximum number of automatic restarts allowed
58
- <%= "#{max_auto_restart_count}" %>=<%= c.fetch(:delayed_job_restart_count) %>
59
+ <%= "#{max_auto_restart_count}" %>=<%= fetch(:delayed_job_restart_count) %>
59
60
 
60
61
  # Reset the restart count if <%= "#{auto_restart_count_clear_interval}" %> seconds
61
62
  # have elapsed since the last automatic restart.
62
- <%= "#{auto_restart_count_clear_interval}" %>=<%= c.fetch(:delayed_job_autorestart_clear_interval) %>
63
+ <%= "#{auto_restart_count_clear_interval}" %>=<%= fetch(:delayed_job_autorestart_clear_interval) %>
63
64
 
64
65
  export <%= "#{exit_code}" %>
65
66
  export <%= "#{exit_status}" %>
@@ -69,7 +70,7 @@ export <%= "#{auto_restart_count_clear_interval }" %>
69
70
 
70
71
  ### Normally no changes should be made after this point
71
72
 
72
- echo "<%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:delayed_job_runit_service_name)}" %> finish; exit code: $<%= "#{exit_code}" %>; exit status: $<%= "#{exit_status}" %>"
73
+ echo "<%= "User: #{fetch(:user)} Application: #{fetch(:application)} Service: #{fetch(:tmp_delayed_job_runit_service_name)}" %> finish; exit code: $<%= "#{exit_code}" %>; exit status: $<%= "#{exit_status}" %>"
73
74
 
74
75
  if test $<%= "#{exit_code}" %> -eq 0 -a $<%= "#{exit_status}" %> -eq 0
75
76
  then
@@ -92,7 +93,7 @@ echo $NOW > last_finish
92
93
  # have elapsed since the last automatic restart.
93
94
  if test $INTERVAL -gt $<%= "#{auto_restart_count_clear_interval}" %>
94
95
  then
95
- echo "NOTICE: <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:delayed_job_runit_service_name)}" %>"
96
+ echo "NOTICE: <%= "User: #{fetch(:user)} Application: #{fetch(:application)} Service: #{fetch(:tmp_delayed_job_runit_service_name)}" %>"
96
97
  echo "The last automatic restart was $INTERVAL seconds ago."
97
98
  echo "Since this is greater than $<%= "#{auto_restart_count_clear_interval}" %> the restart count is being reset."
98
99
  rm -f restart_count
@@ -112,7 +113,7 @@ echo $RESTART_COUNT > restart_count
112
113
  # Check that we have not exceeded the maximum number of automatic restarts
113
114
  if test $RESTART_COUNT -gt $<%= "#{max_auto_restart_count}" %>
114
115
  then
115
- echo "WARNING: <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:delayed_job_runit_service_name)}" %>"
116
+ echo "WARNING: <%= "User: #{fetch(:user)} Application: #{fetch(:application)} Service: #{fetch(:tmp_delayed_job_runit_service_name)}" %>"
116
117
  echo "Reached the limit of $<%= "#{max_auto_restart_count}" %> automatic restarts."
117
118
  echo "The last automatic restart was within $<%= "#{auto_restart_count_clear_interval}" %> seconds."
118
119
  echo "Manual intervention required. No further automatic restarts will be attempted."
@@ -125,7 +126,7 @@ then
125
126
  SLEEP_TIME=$(expr $<%= "#{min_auto_restart_interval}" %> - $INTERVAL)
126
127
  if test $SLEEP_TIME -gt 0
127
128
  then
128
- echo "NOTICE: Restart attempt $RESTART_COUNT for <%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:delayed_job_runit_service_name)}" %>"
129
+ echo "NOTICE: Restart attempt $RESTART_COUNT for <%= "User: #{fetch(:user)} Application: #{fetch(:application)} Service: #{fetch(:tmp_delayed_job_runit_service_name)}" %>"
129
130
  echo "$INTERVAL seconds have elapsed since the last automatic restart."
130
131
  echo "Sleeping for $SLEEP_TIME seconds before the next automatic restart ..."
131
132
  sleep $SLEEP_TIME
@@ -0,0 +1,9 @@
1
+ #!/bin/sh -e
2
+ # Log output for delayed_job worker <%= fetch(:tmp_worker_number) %> running on <%= fetch(:application) %> running as <%= fetch(:user) %>
3
+ # make sure the log directory exists
4
+ mkdir -p "<%= fetch(:tmp_delayed_job_log_path) %>"
5
+ # change path to the log directory
6
+ cd "<%= fetch(:tmp_delayed_job_log_path) %>"
7
+ # start logging
8
+ # exec chpst -u syslog svlogd -tt "<%= fetch(:tmp_delayed_job_log_path) %>"
9
+ exec svlogd -tt "<%= fetch(:tmp_delayed_job_log_path) %>"
@@ -1,14 +1,15 @@
1
1
  #!/bin/bash --login
2
2
  # Start delayed job using rake
3
- <% c = Capistrano::BaseHelper::get_capistrano_instance %>
3
+ # Delayed_Job worker <%= fetch(:tmp_worker_number) %> running on <%= fetch(:application) %> running as <%= fetch(:user) %>
4
+
4
5
  # Redirect stderr so everything ends up in the log file
5
6
  exec 2>&1
6
7
 
7
8
  # Announce start
8
- echo "<%= "User: #{c.fetch(:user)} Application: #{c.fetch(:application)} Service: #{c.fetch(:delayed_job_runit_service_name)}" %> starting..."
9
+ echo "<%= "User: #{fetch(:user)} Application: #{fetch(:application)} Service: #{fetch(:tmp_delayed_job_runit_service_name)}" %> starting..."
9
10
 
10
11
  # Change path to current path
11
- cd '<%= c.current_path %>'
12
+ cd '<%= current_path %>'
12
13
 
13
14
  # Start delayed job
14
- RAILS_ENV=<%= Capistrano::BaseHelper.environment %> exec <%= c.fetch(:delayed_job_bin) %>
15
+ RAILS_ENV=<%= environment %> exec <%= fetch(:delayed_job_bin) %>
metadata CHANGED
@@ -1,80 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-delayed_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
5
- prerelease:
4
+ version: 3.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Leif Ringstad
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-02 00:00:00.000000000 Z
11
+ date: 2015-03-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: capistrano
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: 2.15.5
19
+ version: '3.4'
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
- version: 2.15.5
26
+ version: '3.4'
30
27
  - !ruby/object:Gem::Dependency
31
- name: capistrano-base_helper
28
+ name: activesupport
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
- version: 0.0.11
33
+ version: '3.0'
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
- version: 0.0.11
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: capistrano-monit_runit
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.1
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: bundler
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - "~>"
52
60
  - !ruby/object:Gem::Version
53
- version: 1.3.0
61
+ version: '1.7'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
- version: 1.3.0
68
+ version: '1.7'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: jeweler
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ~>
73
+ - - "~>"
68
74
  - !ruby/object:Gem::Version
69
- version: 1.8.6
75
+ version: '2.0'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ~>
80
+ - - "~>"
76
81
  - !ruby/object:Gem::Version
77
- version: 1.8.6
82
+ version: '2.0'
78
83
  description: Capistrano recipes for Delayed Job using runit and monit.
79
84
  email: leifcr@gmail.com
80
85
  executables: []
@@ -91,39 +96,38 @@ files:
91
96
  - VERSION
92
97
  - capistrano-delayed_job.gemspec
93
98
  - lib/capistrano/delayed_job.rb
94
- - lib/capistrano/delayed_job/config.rb
95
- - lib/capistrano/delayed_job/monit.rb
96
- - lib/capistrano/delayed_job/runit.rb
99
+ - lib/capistrano/helpers/delayed_job/monit.rb
100
+ - lib/capistrano/helpers/delayed_job/runit.rb
101
+ - lib/capistrano/helpers/delayed_job/template_paths.rb
102
+ - lib/capistrano/tasks/config.rake
103
+ - lib/capistrano/tasks/monit.rake
104
+ - lib/capistrano/tasks/runit.rake
97
105
  - templates/monit/delayed_job.conf.erb
98
106
  - templates/runit/finish.erb
99
- - templates/runit/log-run.erb
107
+ - templates/runit/log/run.erb
100
108
  - templates/runit/run.erb
101
109
  homepage: https://github.com/leifcr/capistrano-delayed_job
102
110
  licenses:
103
111
  - MIT
112
+ metadata: {}
104
113
  post_install_message:
105
114
  rdoc_options: []
106
115
  require_paths:
107
116
  - lib
108
117
  required_ruby_version: !ruby/object:Gem::Requirement
109
- none: false
110
118
  requirements:
111
- - - ! '>='
119
+ - - ">="
112
120
  - !ruby/object:Gem::Version
113
121
  version: '0'
114
- segments:
115
- - 0
116
- hash: -2659159965666790878
117
122
  required_rubygems_version: !ruby/object:Gem::Requirement
118
- none: false
119
123
  requirements:
120
- - - ! '>='
124
+ - - ">="
121
125
  - !ruby/object:Gem::Version
122
126
  version: '0'
123
127
  requirements: []
124
128
  rubyforge_project:
125
- rubygems_version: 1.8.25
129
+ rubygems_version: 2.4.6
126
130
  signing_key:
127
- specification_version: 3
131
+ specification_version: 4
128
132
  summary: Capistrano recipes for Delayed Job using runit and monit
129
133
  test_files: []
@@ -1,35 +0,0 @@
1
- require 'capistrano/base_helper/base_helper'
2
- Capistrano::Configuration.instance(true).load do
3
- _cset :delayed_job_runit_service_name, "delayed_job"
4
- _cset :delayed_job_workers, 1 # More than 1 is not implemented yet.
5
-
6
- _cset :delayed_job_bin, 'bundle exec rake jobs:work'
7
-
8
- _cset :delayed_job_pid_file, defer {Capistrano::RunitBase::service_pid(fetch(:delayed_job_runit_service_name))}
9
-
10
- # Logging to path
11
- _cset :delayed_job_log_path, defer {"/var/log/service/#{fetch(:user)}/#{fetch(:application)}_#{Capistrano::BaseHelper.environment}/delayed_job"}
12
-
13
- # runit defaults
14
- _cset :delayed_job_restart_interval, defer {fetch(:runit_restart_interval)}
15
- _cset :delayed_job_restart_count, defer {fetch(:runit_restart_count)}
16
- _cset :delayed_job_autorestart_clear_interval, defer {fetch(:runit_autorestart_clear_interval)}
17
-
18
- # runit paths
19
- _cset :delayed_job_runit_local_run, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit", )), "run.erb")
20
- _cset :delayed_job_runit_local_finish, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit", )), "finish.erb")
21
- _cset :delayed_job_runit_control_q, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit")), "control-q.erb")
22
- _cset :delayed_job_runit_local_log_run, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "runit")), "log-run.erb")
23
-
24
- # monit configuration
25
- _cset :delayed_job_monit_service_name, defer { "#{fetch(:user)}_#{fetch(:application)}_#{Capistrano::BaseHelper.environment}_delayed_job" }
26
- _cset :delayed_job_monit_start_command, defer {"/bin/bash -c '[ ! -h #{Capistrano::RunitBase.service_path(fetch(:delayed_job_runit_service_name))}/run ] || /usr/bin/sv start #{Capistrano::RunitBase.service_path(fetch(:delayed_job_runit_service_name))}'"}
27
- _cset :delayed_job_monit_stop_command, defer {"/usr/bin/sv -w 12 force-stop #{Capistrano::RunitBase.service_path(fetch(:delayed_job_runit_service_name))}"}
28
- _cset :delayed_job_monit_memory_alert_threshold, "100.0 MB for 2 cycles" # Each worker would be likely to use at least 60-70mb ram for an app with many gems
29
- _cset :delayed_job_monit_memory_restart_threshold, "150.0 MB for 3 cycles" # Give the delayed_job_workers some headroom
30
- _cset :delayed_job_monit_cpu_alert_threshold, "90% for 2 cycles"
31
- _cset :delayed_job_monit_cpu_restart_threshold, "95% for 5 cycles"
32
-
33
- _cset :delayed_job_local_monit_config, File.join(File.expand_path(File.join(File.dirname(__FILE__),"../../../templates", "monit")), "delayed_job.conf.erb")
34
-
35
- end
@@ -1,71 +0,0 @@
1
- # Delayed Job - Monit
2
- # Setup and management of Monit for Delayed Job
3
- #
4
-
5
- require 'capistrano/delayed_job/config'
6
- require 'capistrano/base_helper/monit_base'
7
-
8
- Capistrano::Configuration.instance(true).load do
9
- after "monit:setup", "delayed_job:monit:setup"
10
- after "delayed_job:monit:setup", "delayed_job:monit:enable"
11
- after "delayed_job:monit:enable", "monit:reload"
12
-
13
- before "delayed_job:monit.disable", "delayed_job:monit:unmonitor"
14
- after "delayed_job:monit:disable", "monit:reload"
15
-
16
- # start service after update in case it has not been stopped
17
- # after "deploy:update", "delayed_job:monit:start"
18
- # Not needed?
19
-
20
- namespace :delayed_job do
21
- namespace :monit do
22
- desc "Setup Delayed Job monit-service"
23
- task :setup, :roles => [:app, :web, :db] do
24
- # Upload configuration
25
- Capistrano::BaseHelper::generate_and_upload_config(delayed_job_local_monit_config, File.join(fetch(:monit_available_path), "#{fetch(:delayed_job_runit_service_name)}.conf"))
26
- # Enable monitor
27
- end
28
-
29
- desc "Enable monit services for Delayed Job"
30
- task :enable, :roles => [:app, :web, :db] do
31
- Capistrano::MonitBase::Service.enable("#{fetch(:delayed_job_runit_service_name)}.conf")
32
- end
33
-
34
- desc "Disable and stop monit services for Delayed Job"
35
- task :disable, :roles => [:app, :web, :db] do
36
- Capistrano::MonitBase::Service.disable("#{fetch(:delayed_job_runit_service_name)}.conf")
37
- end
38
-
39
- desc "Start monit services for Delayed Job (will also try to start the service)"
40
- task :start, :roles => [:app, :web, :db] do
41
- Capistrano::MonitBase::Service.command_monit("start", fetch(:delayed_job_monit_service_name))
42
- end
43
-
44
- desc "Stop monit services for Delayed Job (will also stop the service)"
45
- task :stop, :roles => [:app, :web, :db] do
46
- Capistrano::MonitBase::Service.command_monit("stop", fetch(:delayed_job_monit_service_name))
47
- end
48
-
49
- desc "Restart monit services for Delayed Job"
50
- task :restart, :roles => [:app, :web, :db] do
51
- Capistrano::MonitBase::Service.command_monit("restart", fetch(:delayed_job_monit_service_name))
52
- end
53
-
54
- desc "Monitor Delayed Job"
55
- task :monitor, :roles => [:app, :web, :db] do
56
- Capistrano::MonitBase::Service.command_monit("monitor", fetch(:delayed_job_monit_service_name))
57
- end
58
-
59
- desc "Unmonitor Delayed Job"
60
- task :unmonitor, :roles => [:app, :web, :db] do
61
- Capistrano::MonitBase::Service.command_monit("unmonitor", fetch(:delayed_job_monit_service_name))
62
- end
63
-
64
- desc "Purge Delayed Job monit configuration"
65
- task :unmonitor, :roles => [:app, :web, :db], :on_error => :continue do
66
- end
67
-
68
- end
69
-
70
- end
71
- end
@@ -1,78 +0,0 @@
1
- # Delayed Job - Runit
2
-
3
- require 'capistrano/delayed_job/config'
4
- require 'capistrano/base_helper/runit_base'
5
-
6
- Capistrano::Configuration.instance(true).load do
7
- after "deploy:setup", "delayed_job:runit:setup"
8
-
9
- # enable service after update in case it has not been setup or is disabled
10
- # Service should probably be started as well?
11
- after "deploy:update", "delayed_job:runit:enable"
12
- before "delayed_job:runit:quit", "delayed_job:runit:stop"
13
-
14
- namespace :delayed_job do
15
- namespace :runit do
16
- desc "Setup Delayed Job runit-service"
17
- task :setup, :roles => :app do
18
- # Create runit config
19
- Capistrano::RunitBase.create_service_dir(delayed_job_runit_service_name)
20
- Capistrano::BaseHelper::generate_and_upload_config(delayed_job_runit_local_run, Capistrano::RunitBase.remote_run_config_path(delayed_job_runit_service_name))
21
- Capistrano::BaseHelper::generate_and_upload_config(delayed_job_runit_local_finish, Capistrano::RunitBase.remote_finish_config_path(delayed_job_runit_service_name))
22
-
23
- # Log run script
24
- Capistrano::BaseHelper::generate_and_upload_config(delayed_job_runit_local_log_run, Capistrano::RunitBase.remote_service_log_run_path(delayed_job_runit_service_name))
25
-
26
- # Make scripts executable
27
- Capistrano::RunitBase.make_service_scripts_executeable(delayed_job_runit_service_name)
28
-
29
- # Set correct permissions/owner on log path
30
- Capistrano::RunitBase.create_and_permissions_on_path(fetch(:delayed_job_log_path))
31
- end
32
-
33
- desc "Enable Delayed Job runit-service"
34
- task :enable, :roles => :app do
35
- Capistrano::RunitBase.enable_service(delayed_job_runit_service_name)
36
- end
37
-
38
- desc "Disable Delayed Job runit-service"
39
- task :disable, :roles => :app do
40
- Capistrano::RunitBase.disable_service(delayed_job_runit_service_name)
41
- end
42
-
43
- desc "Start Delayed Job runit-service"
44
- task :start, :roles => :app do
45
- Capistrano::RunitBase.start_service(delayed_job_runit_service_name)
46
- end
47
-
48
- desc "Start Delayed Job runit-service only ONCE (no supervision...)"
49
- task :once, :roles => :app do
50
- Capistrano::RunitBase.start_service_once(delayed_job_runit_service_name)
51
- end
52
-
53
- desc "Stop Delayed Job runit-service"
54
- task :stop, :roles => :app, :on_error => :continue do
55
- # have to use force-stop on failed stop, since delayed_job might not terminate properly
56
- # will wait 25 seconds for delayed_job to shut down, to allow it to serve any on-going requests
57
- Capistrano::RunitBase.control_service(delayed_job_runit_service_name, "force-stop", false, "-w 25")
58
- end
59
-
60
- desc "Quit the Delayed Job runit-service"
61
- task :quit, :roles => :app, :on_error => :continue do
62
- Capistrano::RunitBase.control_service(delayed_job_runit_service_name, "quit")
63
- end
64
-
65
- desc "Restart Delayed Job runit-service"
66
- task :restart, :roles => :app do
67
- Capistrano::RunitBase.control_service(delayed_job_runit_service_name, "restart")
68
- end
69
-
70
- desc "Purge Delayed Job runit configuration"
71
- task :purge, :roles => :app, :on_error => :continue do
72
- Capistrano::RunitBase.force_control_service(delayed_job_runit_service_name, "force-stop", true)
73
- Capistrano::RunitBase.purge_service(delayed_job_runit_service_name)
74
- end
75
-
76
- end
77
- end
78
- end
@@ -1,10 +0,0 @@
1
- #!/bin/sh -e
2
- <% c = Capistrano::BaseHelper::get_capistrano_instance %>
3
- # Log output for delayed_job running on <%= c.fetch(:application) %> running as <%= c.fetch(:user) %>
4
- # make sure the log directory exists
5
- mkdir -p "<%= c.fetch(:delayed_job_log_path) %>"
6
- # change path to the log directory
7
- cd "<%= c.fetch(:delayed_job_log_path) %>"
8
- # start logging
9
- # exec chpst -u syslog svlogd -tt "<%= c.fetch(:delayed_job_log_path) %>"
10
- exec svlogd -tt "<%= c.fetch(:delayed_job_log_path) %>"