procodile 1.0.14 → 1.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/procodile +7 -16
- data/lib/procodile/app_determination.rb +6 -43
- data/lib/procodile/config.rb +18 -34
- data/lib/procodile/control_session.rb +0 -1
- data/lib/procodile/status_cli_output.rb +0 -1
- data/lib/procodile/supervisor.rb +1 -1
- data/lib/procodile/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2df02f31fea5565a5b982cd4d1ae98b53e6256d
|
4
|
+
data.tar.gz: a758543c9bb33dbe1f5520c0d38ad9c128cb1255
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2ef597c33f6475992e64d577b543d50b4b70da16e634afd61a3a74339cdca4b1cdb20f7ba2bf8ca79939a1b5e0d1d132d0f61ccd4b08f4ae41c528377f7dc81
|
7
|
+
data.tar.gz: f6bdaa3e8caccccb8a6761536f5f8e77ad7911fd4f0b63f5bb0f318228c29ceec671011622816a4573be0c67411585167dbacfe541d2721a41bad75b95f3bd39
|
data/bin/procodile
CHANGED
@@ -29,10 +29,6 @@ begin
|
|
29
29
|
options[:root] = root
|
30
30
|
end
|
31
31
|
|
32
|
-
opts.on("-e", "--environment NAME", "The config environment to use") do |name|
|
33
|
-
options[:environment] = name
|
34
|
-
end
|
35
|
-
|
36
32
|
opts.on("--procfile PATH", "The path to the Procfile (defaults to: Procfile)") do |path|
|
37
33
|
options[:procfile] = path
|
38
34
|
end
|
@@ -57,7 +53,7 @@ end
|
|
57
53
|
|
58
54
|
# Create a determination to work out where we want to load our app from
|
59
55
|
require 'procodile/app_determination'
|
60
|
-
ap = Procodile::AppDetermination.new(FileUtils.pwd, options[:root], options[:procfile],
|
56
|
+
ap = Procodile::AppDetermination.new(FileUtils.pwd, options[:root], options[:procfile], global_config)
|
61
57
|
if ap.ambiguous?
|
62
58
|
if ENV['PROCODILE_APP_ID']
|
63
59
|
ap.set_app(ENV['PROCODILE_APP_ID'].to_i)
|
@@ -85,20 +81,15 @@ if ap.ambiguous?
|
|
85
81
|
end
|
86
82
|
end
|
87
83
|
|
88
|
-
if ap.user && ENV['USER'] != ap.user
|
89
|
-
if global_config['user_reexec']
|
90
|
-
$stderr.puts "\e[31mProcodile must be run as #{ap.user}. Re-executing as #{ap.user}...\e[0m"
|
91
|
-
exec("sudo -E -u #{ap.user} -- #{$0} #{ORIGINAL_ARGV}")
|
92
|
-
else
|
93
|
-
$stderr.puts "\e[31mError: Procodile must be run as #{ap.user}\e[0m"
|
94
|
-
exit 1
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
84
|
begin
|
99
85
|
if command != 'help'
|
100
|
-
cli.config = Procodile::Config.new(ap.root, ap.
|
86
|
+
cli.config = Procodile::Config.new(ap.root, ap.procfile)
|
87
|
+
if cli.config.user && ENV['USER'] != cli.config.user
|
88
|
+
$stderr.puts "\e[31mProcodile must be run as #{cli.config.user}. Re-executing as #{cli.config.user}...\e[0m"
|
89
|
+
exec("sudo -H -u #{cli.config.user} -- #{$0} #{ORIGINAL_ARGV}")
|
90
|
+
end
|
101
91
|
end
|
92
|
+
|
102
93
|
cli.dispatch(command)
|
103
94
|
rescue Procodile::Error => e
|
104
95
|
$stderr.puts "Error: #{e.message}".color(31)
|
@@ -1,26 +1,20 @@
|
|
1
1
|
module Procodile
|
2
2
|
#
|
3
|
-
#
|
3
|
+
# This class is responsible for determining which application should be
|
4
4
|
# sued
|
5
5
|
#
|
6
6
|
class AppDetermination
|
7
7
|
|
8
8
|
# Start by creating an determination ased on the root and procfile that has been provided
|
9
9
|
# to us by the user (from --root and/or --procfile)
|
10
|
-
def initialize(pwd, given_root, given_procfile,
|
10
|
+
def initialize(pwd, given_root, given_procfile, global_options = {})
|
11
11
|
@pwd = pwd
|
12
|
-
@given_root = given_root
|
12
|
+
@given_root = given_root ? File.expand_path(given_root, pwd) : nil
|
13
13
|
@given_procfile = given_procfile
|
14
|
-
@given_environment = given_environment
|
15
14
|
@global_options = global_options
|
16
15
|
calculate
|
17
16
|
end
|
18
17
|
|
19
|
-
# Return the environment
|
20
|
-
def environment
|
21
|
-
@given_environment || @environment || 'production'
|
22
|
-
end
|
23
|
-
|
24
18
|
# Return the root directory
|
25
19
|
def root
|
26
20
|
@root
|
@@ -31,16 +25,6 @@ module Procodile
|
|
31
25
|
@procfile
|
32
26
|
end
|
33
27
|
|
34
|
-
# Return the user that we must be executing as if not current user
|
35
|
-
def user
|
36
|
-
@user
|
37
|
-
end
|
38
|
-
|
39
|
-
# Should this be reexeced
|
40
|
-
def reexec?
|
41
|
-
@reexec == true
|
42
|
-
end
|
43
|
-
|
44
28
|
# Are we in an app's directory?
|
45
29
|
def in_app_directory?
|
46
30
|
@in_app_directory == true
|
@@ -65,7 +49,9 @@ module Procodile
|
|
65
49
|
def app_options
|
66
50
|
if ambiguous?
|
67
51
|
hash = {}
|
68
|
-
@global_options.each_with_index
|
52
|
+
@global_options.each_with_index do |option, i|
|
53
|
+
hash[i] = option['name'] || option['root']
|
54
|
+
end
|
69
55
|
hash
|
70
56
|
else
|
71
57
|
{}
|
@@ -80,11 +66,6 @@ module Procodile
|
|
80
66
|
if ambiguous?
|
81
67
|
# Otherwise, try and use the global config we have been given
|
82
68
|
find_root_and_procfile_from_options(@global_options)
|
83
|
-
else
|
84
|
-
# Try to load additional global details on to the existing app
|
85
|
-
if @root && options = global_options_for_path(@root)
|
86
|
-
add_global_options(options)
|
87
|
-
end
|
88
69
|
end
|
89
70
|
end
|
90
71
|
|
@@ -119,7 +100,6 @@ module Procodile
|
|
119
100
|
if options.is_a?(Hash)
|
120
101
|
# Use the current hash
|
121
102
|
find_root_and_procfile(@pwd, options['root'], options['procfile'])
|
122
|
-
add_global_options(options)
|
123
103
|
elsif options.is_a?(Array)
|
124
104
|
# Global options is provides a list of apps. We need to know which one of
|
125
105
|
# these we should be looking at.
|
@@ -129,23 +109,6 @@ module Procodile
|
|
129
109
|
end
|
130
110
|
end
|
131
111
|
|
132
|
-
def global_options_for_path(root)
|
133
|
-
root = expand_path(root)
|
134
|
-
if @global_options.is_a?(Hash) && @global_options['root'] && expand_path(@global_options['root']) == root
|
135
|
-
@global_options
|
136
|
-
elsif @global_options.is_a?(Array) && option = @global_options.select { |o| o['root'] && expand_path(o['root']) == root }.first
|
137
|
-
option
|
138
|
-
else
|
139
|
-
nil
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
def add_global_options(options)
|
144
|
-
@user = options['user'] if options['user']
|
145
|
-
@reexec = options['user_reexec'] if options['user_reexec']
|
146
|
-
@environment = options['environment'] if options['environment']
|
147
|
-
end
|
148
|
-
|
149
112
|
def expand_path(path, root = nil)
|
150
113
|
# Remove trailing slashes for normalization
|
151
114
|
path = path.gsub(/\/\z/, '')
|
data/lib/procodile/config.rb
CHANGED
@@ -8,12 +8,8 @@ module Procodile
|
|
8
8
|
|
9
9
|
COLORS = [35, 31, 36, 32, 33, 34]
|
10
10
|
|
11
|
-
|
12
|
-
attr_reader :environment
|
13
|
-
|
14
|
-
def initialize(root, environment = nil, procfile = nil)
|
11
|
+
def initialize(root, procfile = nil)
|
15
12
|
@root = root
|
16
|
-
@environment = environment || 'production'
|
17
13
|
@procfile_path = procfile
|
18
14
|
unless File.file?(procfile_path)
|
19
15
|
raise Error, "Procfile not found at #{procfile_path}"
|
@@ -59,12 +55,20 @@ module Procodile
|
|
59
55
|
end
|
60
56
|
end
|
61
57
|
|
58
|
+
def root
|
59
|
+
local_options['root'] || options['root'] || @root
|
60
|
+
end
|
61
|
+
|
62
|
+
def user
|
63
|
+
local_options['user'] || options['user']
|
64
|
+
end
|
65
|
+
|
62
66
|
def app_name
|
63
|
-
@app_name ||=
|
67
|
+
@app_name ||= local_options['app_name'] || options['app_name'] || 'Procodile'
|
64
68
|
end
|
65
69
|
|
66
70
|
def console_command
|
67
|
-
|
71
|
+
local_options['console_command'] || options['console_command']
|
68
72
|
end
|
69
73
|
|
70
74
|
def processes
|
@@ -96,11 +100,11 @@ module Procodile
|
|
96
100
|
end
|
97
101
|
|
98
102
|
def environment_variables
|
99
|
-
|
103
|
+
(options['env'] || {}).merge(local_options['env'] || {})
|
100
104
|
end
|
101
105
|
|
102
106
|
def pid_root
|
103
|
-
@pid_root ||= File.expand_path(
|
107
|
+
@pid_root ||= File.expand_path(local_options['pid_root'] || options['pid_root'] || 'pids', self.root)
|
104
108
|
end
|
105
109
|
|
106
110
|
def supervisor_pid_path
|
@@ -108,19 +112,19 @@ module Procodile
|
|
108
112
|
end
|
109
113
|
|
110
114
|
def log_path
|
111
|
-
log_path =
|
115
|
+
log_path = local_options['log_path'] || options['log_path']
|
112
116
|
if log_path
|
113
|
-
File.expand_path(log_path,
|
117
|
+
File.expand_path(log_path, self.root)
|
114
118
|
elsif log_path.nil? && self.log_root
|
115
119
|
File.join(self.log_root, 'procodile.log')
|
116
120
|
else
|
117
|
-
File.expand_path("procodile.log",
|
121
|
+
File.expand_path("procodile.log", self.root)
|
118
122
|
end
|
119
123
|
end
|
120
124
|
|
121
125
|
def log_root
|
122
|
-
if log_root = (
|
123
|
-
File.expand_path(log_root,
|
126
|
+
if log_root = (local_options['log_root'] || options['log_root'])
|
127
|
+
File.expand_path(log_root, self.root)
|
124
128
|
else
|
125
129
|
nil
|
126
130
|
end
|
@@ -150,26 +154,6 @@ module Procodile
|
|
150
154
|
process
|
151
155
|
end
|
152
156
|
|
153
|
-
def fetch(value, default = nil)
|
154
|
-
if value.is_a?(Hash)
|
155
|
-
if value.has_key?(@environment)
|
156
|
-
value[@environment]
|
157
|
-
else
|
158
|
-
default
|
159
|
-
end
|
160
|
-
else
|
161
|
-
value.nil? ? default : value
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def fetch_hash_values(hash)
|
166
|
-
hash.each_with_object({}) do |(key, value), h|
|
167
|
-
if value = fetch(value)
|
168
|
-
h[key] = value
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
157
|
def load_process_list_from_file
|
174
158
|
YAML.load_file(procfile_path)
|
175
159
|
end
|
@@ -72,7 +72,6 @@ module Procodile
|
|
72
72
|
:version => Procodile::VERSION,
|
73
73
|
:messages => @supervisor.messages,
|
74
74
|
:root => @supervisor.config.root,
|
75
|
-
:environment => @supervisor.config.environment,
|
76
75
|
:app_name => @supervisor.config.app_name,
|
77
76
|
:supervisor => @supervisor.to_hash,
|
78
77
|
:instances => instances,
|
@@ -15,7 +15,6 @@ module Procodile
|
|
15
15
|
def print_header
|
16
16
|
puts "Procodile Version " + @status['version'].to_s.color(34)
|
17
17
|
puts "Application Root " + "#{@status['root']}".color(34)
|
18
|
-
puts "Environment " + "#{@status['environment']}".color(34)
|
19
18
|
puts "Supervisor PID " + "#{@status['supervisor']['pid']}".color(34)
|
20
19
|
if time = @status['supervisor']['started_at']
|
21
20
|
time = Time.at(time)
|
data/lib/procodile/supervisor.rb
CHANGED
@@ -30,7 +30,7 @@ module Procodile
|
|
30
30
|
|
31
31
|
def start(&after_start)
|
32
32
|
Procodile.log nil, "system", "Procodile supervisor started with PID #{::Process.pid}"
|
33
|
-
Procodile.log nil, "system", "
|
33
|
+
Procodile.log nil, "system", "Application root is #{@config.root}"
|
34
34
|
if @run_options[:respawn] == false
|
35
35
|
Procodile.log nil, "system", "Automatic respawning is disabled"
|
36
36
|
end
|
data/lib/procodile/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: procodile
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Cooke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -70,9 +70,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
version: '0'
|
71
71
|
requirements: []
|
72
72
|
rubyforge_project:
|
73
|
-
rubygems_version: 2.5.
|
73
|
+
rubygems_version: 2.5.2
|
74
74
|
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: This gem will help you run Ruby processes from a Procfile on Linux servers
|
77
77
|
in the background.
|
78
78
|
test_files: []
|
79
|
+
has_rdoc:
|