negroku 2.0.0.pre5 → 2.0.0.pre6
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 +4 -4
- data/lib/negroku/deploy.rb +9 -10
- data/lib/negroku/eye/delayed_job.rb +1 -0
- data/lib/negroku/eye/unicorn.rb +2 -0
- data/lib/negroku/eye.rb +3 -0
- data/lib/negroku/helpers/templates.rb +1 -0
- data/lib/negroku/helpers/watch.rb +9 -0
- data/lib/negroku/helpers.rb +16 -3
- data/lib/negroku/tasks/eye/delayed_job.rake +21 -0
- data/lib/negroku/tasks/eye/unicorn.rake +21 -0
- data/lib/negroku/tasks/eye.rake +87 -0
- data/lib/negroku/tasks/rbenv.rake +12 -0
- data/lib/negroku/tasks/unicorn.rake +10 -2
- data/lib/negroku/templates/negroku/Capfile.erb +5 -0
- data/lib/negroku/templates/tasks/eye/_delayed_job.erb +28 -0
- data/lib/negroku/templates/tasks/eye/_unicorn.erb +27 -0
- data/lib/negroku/templates/tasks/eye/application.eye.erb +26 -0
- data/lib/negroku/version.rb +1 -1
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a50e3178dc8ccdc1dce8f8ce983dfba19eeade5
|
4
|
+
data.tar.gz: d5f480fb58ac84a329522c32ee04e7c66204e17f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 014869c6a9f70ab69e226c9b041e5ab6503897c1cc80f414e0e4630bb0b0e5488b41ea0d8458250f98b7102d69b11d5725a4e93b6b06e335a43280acc4322809
|
7
|
+
data.tar.gz: 2ef7920ec67bc35ed978653a133e6819c160e8eeded18e5014a123ff016db90347b689078908fd9e2d9f8e4e7bddec12b1aed51c8b212375b5f488ba812b7336
|
data/lib/negroku/deploy.rb
CHANGED
@@ -20,14 +20,13 @@ end
|
|
20
20
|
|
21
21
|
# Load Negroku tasks
|
22
22
|
load_task "negroku"
|
23
|
-
load_task "rbenv"
|
24
|
-
load_task "nodenv"
|
25
|
-
load_task "bower"
|
26
|
-
load_task "bundler"
|
27
|
-
load_task "rails"
|
28
|
-
load_task "nginx"
|
29
|
-
load_task "unicorn"
|
30
|
-
load_task "delayed_job"
|
31
|
-
load_task "whenever"
|
32
|
-
|
23
|
+
load_task "rbenv" if required? 'capistrano/rbenv'
|
24
|
+
load_task "nodenv" if required? 'capistrano/nodenv'
|
25
|
+
load_task "bower" if required? 'capistrano/bower'
|
26
|
+
load_task "bundler" if required? 'capistrano/bundler'
|
27
|
+
load_task "rails" if required? 'capistrano/rails'
|
28
|
+
load_task "nginx" if required? 'capistrano/nginx'
|
29
|
+
load_task "unicorn" if required? 'capistrano3/unicorn'
|
30
|
+
load_task "delayed_job" if required? 'capistrano/delayed-job'
|
31
|
+
load_task "whenever" if required? 'whenever/capistrano'
|
33
32
|
load_task "log"
|
@@ -0,0 +1 @@
|
|
1
|
+
load_task 'eye/delayed_job', ['capistrano/delayed-job']
|
data/lib/negroku/eye.rb
ADDED
data/lib/negroku/helpers.rb
CHANGED
@@ -1,13 +1,26 @@
|
|
1
1
|
require 'negroku/helpers/templates'
|
2
|
+
require 'negroku/helpers/watch'
|
2
3
|
require 'negroku/helpers/logs'
|
3
4
|
require 'negroku/helpers/env'
|
4
5
|
|
5
6
|
# Find out if a specific library file was already required
|
6
|
-
def
|
7
|
+
def required?(file)
|
7
8
|
rex = Regexp.new("/#{Regexp.quote(file)}\.(so|o|sl|rb)?")
|
8
9
|
$LOADED_FEATURES.find { |f| f =~ rex }
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
-
|
12
|
+
def any_required?(arr)
|
13
|
+
arr.any? { |file| required?(file) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def all_required?(arr)
|
17
|
+
arr.all? { |file| required?(file) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def load_task(name, dependencies = [])
|
21
|
+
if all_required? dependencies
|
22
|
+
load File.join(File.dirname(__FILE__), 'tasks', "#{name}.rake")
|
23
|
+
else
|
24
|
+
fail "To load #{name} you need to include #{dependencies.join ", "}"
|
25
|
+
end
|
13
26
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#########
|
2
|
+
## Adds support to monitor delayed_job processes through eye
|
3
|
+
#########
|
4
|
+
|
5
|
+
# Watch the delayed_job processes using the build in template
|
6
|
+
watch_process(:delayed_job);
|
7
|
+
|
8
|
+
# Override start, restart and stop delayed_job tasks to so they call
|
9
|
+
# the eye equivalents
|
10
|
+
# namespace :unicorn do
|
11
|
+
# ['start','restart','stop'].each do |cmd|
|
12
|
+
# if Rake::Task.task_defined?("unicorn:#{cmd}")
|
13
|
+
# Rake::Task["unicorn:#{cmd}"].clear_actions
|
14
|
+
# # Reload or restart unicorn after the application is published
|
15
|
+
# desc "#{cmd} unicorn through eye"
|
16
|
+
# task cmd do
|
17
|
+
# invoke "eye:#{cmd}", 'unicorn'
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#########
|
2
|
+
## Adds support to monitor unicorn processes through eye
|
3
|
+
#########
|
4
|
+
|
5
|
+
# Watch the unicorn processes using the build in template
|
6
|
+
watch_process(:unicorn);
|
7
|
+
|
8
|
+
# Override start, restart and stop unicorn tasks to so they call
|
9
|
+
# the eye equivalents
|
10
|
+
namespace :unicorn do
|
11
|
+
['start','restart','stop'].each do |cmd|
|
12
|
+
if Rake::Task.task_defined?("unicorn:#{cmd}")
|
13
|
+
Rake::Task["unicorn:#{cmd}"].clear_actions
|
14
|
+
# Reload or restart unicorn after the application is published
|
15
|
+
desc "using eye"
|
16
|
+
task cmd do
|
17
|
+
invoke "eye:#{cmd}", 'unicorn'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'negroku/helpers/templates'
|
2
|
+
|
3
|
+
## eye.rb
|
4
|
+
#
|
5
|
+
# Adds eye variables and tasks
|
6
|
+
|
7
|
+
namespace :load do
|
8
|
+
task :defaults do
|
9
|
+
###################################
|
10
|
+
## eye template variables
|
11
|
+
|
12
|
+
# Local path to look for custom config template
|
13
|
+
set :eye_application_template, -> { "config/deploy/#{fetch(:stage)}/eye.rb.erb" }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
namespace :eye do
|
19
|
+
|
20
|
+
desc "Loads eye config and starts monitoring"
|
21
|
+
task :load do
|
22
|
+
on release_roles fetch(:eye_roles) do
|
23
|
+
within "#{current_path}" do
|
24
|
+
execute :eye, :load, "#{shared_path}/config/eye.rb"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
[:start,:restart, :info, :stop].each do |cmd|
|
30
|
+
# Single process
|
31
|
+
desc "Calls eye's #{cmd.to_s} on a process"
|
32
|
+
task "#{cmd}:process", [:name] do |t, args|
|
33
|
+
on release_roles fetch(:eye_roles) do
|
34
|
+
within "#{current_path}" do
|
35
|
+
execute :eye, cmd, "#{args[:name]}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
#
|
40
|
+
desc "Calls eye's #{cmd.to_s} on the whole app"
|
41
|
+
task cmd do |t, args|
|
42
|
+
on release_roles fetch(:eye_roles) do
|
43
|
+
within "#{current_path}" do
|
44
|
+
execute :eye, cmd, "#{fetch(:application)}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Adds some task on complement the capistrano3-unicorn tasks
|
52
|
+
# This tasks are under the negroku namespace for easier identification
|
53
|
+
namespace :negroku do
|
54
|
+
|
55
|
+
namespace :eye do
|
56
|
+
|
57
|
+
desc "Upload eye configuration file"
|
58
|
+
task :setup do
|
59
|
+
on release_roles fetch(:eye_roles) do
|
60
|
+
within "#{shared_path}/config" do
|
61
|
+
processes = fetch(:eye_watched_processes, {})
|
62
|
+
|
63
|
+
template_path = fetch(:eye_application_template)
|
64
|
+
|
65
|
+
# use a build in template if the template doesn't exists in the project
|
66
|
+
unless File.exists?(template_path)
|
67
|
+
template_path = "tasks/eye/application.eye.erb"
|
68
|
+
end
|
69
|
+
|
70
|
+
config = build_template(template_path, nil, binding)
|
71
|
+
upload! config, '/tmp/application.eye'
|
72
|
+
|
73
|
+
execute :mv, '/tmp/application.eye', 'eye.rb'
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
before "deploy:publishing", "negroku:eye:setup"
|
79
|
+
after "negroku:eye:setup", "eye:load"
|
80
|
+
|
81
|
+
define_logs(:eye, {
|
82
|
+
app: 'eye.log'
|
83
|
+
})
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -11,6 +11,9 @@ namespace :load do
|
|
11
11
|
|
12
12
|
# Link .rbenv-vars file
|
13
13
|
set :linked_files, fetch(:linked_files, []) << '.rbenv-vars'
|
14
|
+
|
15
|
+
# Set the path to rbenv
|
16
|
+
set :rbenv_path, "/home/deploy/.rbenv"
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
@@ -60,5 +63,14 @@ namespace :rbenv do
|
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|
66
|
+
before 'rbenv:vars:add', 'env:changed'
|
67
|
+
before 'rbenv:vars:remove', 'env:changed'
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
namespace :env do
|
73
|
+
desc 'Env variables changed'
|
74
|
+
task :changed do
|
63
75
|
end
|
64
76
|
end
|
@@ -15,6 +15,8 @@ namespace :load do
|
|
15
15
|
# Defines where the unicorn pid will live.
|
16
16
|
set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" }
|
17
17
|
|
18
|
+
set :unicorn_log, -> { "#{shared_path}/log/unicorn.log" }
|
19
|
+
|
18
20
|
set :unicorn_config_path, -> { "#{shared_path}/config/unicorn.rb" }
|
19
21
|
|
20
22
|
###################################
|
@@ -46,7 +48,7 @@ namespace :load do
|
|
46
48
|
## capistrano3/nginx variables
|
47
49
|
|
48
50
|
# Set the app server socket if nginx is being used
|
49
|
-
set :app_server_socket, -> { fetch(:unicorn_socket) } if
|
51
|
+
set :app_server_socket, -> { fetch(:unicorn_socket) } if required? 'capistrano/nginx'
|
50
52
|
|
51
53
|
end
|
52
54
|
end
|
@@ -78,7 +80,13 @@ namespace :negroku do
|
|
78
80
|
# Reload or restart unicorn after the application is published
|
79
81
|
after 'deploy:publishing', 'restart' do
|
80
82
|
invoke 'negroku:unicorn:setup'
|
81
|
-
invoke
|
83
|
+
invoke 'unicorn:restart'
|
84
|
+
end
|
85
|
+
|
86
|
+
before 'env:changed', 'hard-restart' do
|
87
|
+
invoke 'unicorn:stop'
|
88
|
+
sleep 5
|
89
|
+
invoke 'unicorn:start'
|
82
90
|
end
|
83
91
|
|
84
92
|
# Ensure the folders needed exist
|
@@ -28,6 +28,11 @@ require 'capistrano/nginx'
|
|
28
28
|
require 'capistrano/delayed-job'
|
29
29
|
require 'whenever/capistrano'
|
30
30
|
|
31
|
+
# Eye monitoring
|
32
|
+
require 'negroku/eye'
|
33
|
+
require 'negroku/eye/unicorn'
|
34
|
+
require 'negroku/eye/delayed-job'
|
35
|
+
|
31
36
|
# NEGROKU
|
32
37
|
# Includes negroku defaults and tasks
|
33
38
|
require 'negroku/deploy'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
cwd = File.expand_path(File.join(File.dirname(__FILE__), %w[ ../ ../ ]))
|
2
|
+
|
3
|
+
config_path = File.join(cwd, %w{ config dj.yml } )
|
4
|
+
|
5
|
+
workers_count = if File.exists?(config_path)
|
6
|
+
YAML.load_file(config_path).try(:[], :workers) || 5
|
7
|
+
else
|
8
|
+
5
|
9
|
+
end
|
10
|
+
|
11
|
+
Eye.application 'delayed_job' do
|
12
|
+
working_dir cwd
|
13
|
+
stop_on_delete true
|
14
|
+
|
15
|
+
group 'dj' do
|
16
|
+
chain grace: 5.seconds
|
17
|
+
|
18
|
+
(1 .. workers_count).each do |i|
|
19
|
+
process "dj-#{i}" do
|
20
|
+
pid_file "tmp/pids/delayed_job.#{i}.pid"
|
21
|
+
start_command "rake jobs:work"
|
22
|
+
daemonize true
|
23
|
+
stop_signals [:INT, 30.seconds, :TERM, 10.seconds, :KILL]
|
24
|
+
stdall "log/dj-#{i}.log"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
RAILS_ENV="<%= fetch(:rails_env) %>"
|
2
|
+
|
3
|
+
process 'unicorn' do
|
4
|
+
env rbenv_root: "<%= fetch(:rbenv_path) %>", rbenv_version: "<%=fetch(:rbenv_ruby) %>"
|
5
|
+
pid_file "<%= fetch(:unicorn_pid) %>"
|
6
|
+
start_command "<%= fetch(:rbenv_prefix) %> bundle exec unicorn -Dc <%= fetch(:unicorn_config_path) %> -E #{RAILS_ENV}"
|
7
|
+
stdall "<%= fetch(:unicorn_log) %>"
|
8
|
+
|
9
|
+
# stop signals:
|
10
|
+
# http://unicorn.bogomips.org/SIGNALS.html
|
11
|
+
stop_signals [:TERM, 10.seconds]
|
12
|
+
|
13
|
+
# soft restart
|
14
|
+
restart_command "kill -USR2 {PID}"
|
15
|
+
|
16
|
+
check :cpu, :every => 30, :below => 80, :times => 3
|
17
|
+
check :memory, :every => 30, :below => 150.megabytes, :times => [3,5]
|
18
|
+
|
19
|
+
start_timeout 100.seconds
|
20
|
+
restart_grace 30.seconds
|
21
|
+
|
22
|
+
monitor_children do
|
23
|
+
stop_command "kill -QUIT {PID}"
|
24
|
+
check :cpu, :every => 30, :below => 80, :times => 3
|
25
|
+
check :memory, :every => 30, :below => 150.megabytes, :times => [3,5]
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'eye-http'
|
2
|
+
|
3
|
+
# Setups Eye global conf if not already
|
4
|
+
Eye.config do
|
5
|
+
logger '/var/log/eye-global.log'
|
6
|
+
http :enable => true, :host => "0.0.0.0", :port => 12345
|
7
|
+
end
|
8
|
+
|
9
|
+
# Adding application
|
10
|
+
Eye.application '<%= fetch(:application)%>' do
|
11
|
+
|
12
|
+
# All options inherits down to the config leafs.
|
13
|
+
# except `env`, which merging down
|
14
|
+
|
15
|
+
stdall '<%= shared_path %>/log/eye.log'
|
16
|
+
working_dir '<%= current_path %>'
|
17
|
+
|
18
|
+
trigger :flapping, times: 10, within: 1.minute, retry_in: 10.minutes
|
19
|
+
|
20
|
+
check :cpu, every: 10.seconds, below: 100, times: 3 # global check for all processes
|
21
|
+
|
22
|
+
<% processes.each do |process_name, options| -%>
|
23
|
+
<%= partial options[:template], binding %>
|
24
|
+
<% end -%>
|
25
|
+
|
26
|
+
end
|
data/lib/negroku/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: negroku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.pre6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juan Ignacio Donoso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdoc
|
@@ -302,17 +302,24 @@ files:
|
|
302
302
|
- lib/negroku/cli/env.rb
|
303
303
|
- lib/negroku/cli/stage.rb
|
304
304
|
- lib/negroku/deploy.rb
|
305
|
+
- lib/negroku/eye.rb
|
306
|
+
- lib/negroku/eye/delayed_job.rb
|
307
|
+
- lib/negroku/eye/unicorn.rb
|
305
308
|
- lib/negroku/formatters/simple.rb
|
306
309
|
- lib/negroku/helpers.rb
|
307
310
|
- lib/negroku/helpers/app_directory.rb
|
308
311
|
- lib/negroku/helpers/env.rb
|
309
312
|
- lib/negroku/helpers/logs.rb
|
310
313
|
- lib/negroku/helpers/templates.rb
|
314
|
+
- lib/negroku/helpers/watch.rb
|
311
315
|
- lib/negroku/i18n.rb
|
312
316
|
- lib/negroku/locales/en.yml
|
313
317
|
- lib/negroku/tasks/bower.rake
|
314
318
|
- lib/negroku/tasks/bundler.rake
|
315
319
|
- lib/negroku/tasks/delayed_job.rake
|
320
|
+
- lib/negroku/tasks/eye.rake
|
321
|
+
- lib/negroku/tasks/eye/delayed_job.rake
|
322
|
+
- lib/negroku/tasks/eye/unicorn.rake
|
316
323
|
- lib/negroku/tasks/log.rake
|
317
324
|
- lib/negroku/tasks/negroku.rake
|
318
325
|
- lib/negroku/tasks/nginx.rake
|
@@ -324,6 +331,9 @@ files:
|
|
324
331
|
- lib/negroku/templates/negroku/Capfile.erb
|
325
332
|
- lib/negroku/templates/negroku/deploy.rb.erb
|
326
333
|
- lib/negroku/templates/negroku/stage.rb.erb
|
334
|
+
- lib/negroku/templates/tasks/eye/_delayed_job.erb
|
335
|
+
- lib/negroku/templates/tasks/eye/_unicorn.erb
|
336
|
+
- lib/negroku/templates/tasks/eye/application.eye.erb
|
327
337
|
- lib/negroku/templates/tasks/unicorn_rails.rb.erb
|
328
338
|
- lib/negroku/templates/tasks/unicorn_rails_activerecord.rb.erb
|
329
339
|
- lib/negroku/version.rb
|