app-deploy 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +40 -0
- data/README +15 -4
- data/TODO +2 -2
- data/app-deploy.gemspec +13 -14
- data/example/Rakefile +2 -10
- data/lib/app-deploy.rb +1 -1
- data/lib/app-deploy/nginx.rake +25 -15
- data/lib/app-deploy/signal.rake +20 -15
- data/lib/app-deploy/unicorn.rake +42 -0
- data/lib/app-deploy/utils.rb +29 -25
- data/lib/app-deploy/version.rb +1 -1
- metadata +4 -2
data/CHANGES
CHANGED
@@ -1,5 +1,45 @@
|
|
1
1
|
= app-deploy changes history
|
2
2
|
|
3
|
+
== app-deploy 0.7.0 / 2009-12-16
|
4
|
+
* pid management rewritten
|
5
|
+
* added signal tasks to deal with any pidfile process
|
6
|
+
* switched nginx tasks to use signal tasks as a backend
|
7
|
+
* added unicorn tasks just like the way nginx worked
|
8
|
+
|
9
|
+
http://blogger.godfat.org/2009/12/app-deploy-released-2.html
|
10
|
+
|
11
|
+
i hate myself... (that always do stupid things)
|
12
|
+
|
13
|
+
i would prepare to release app-deploy-0.7.0 tomorrow,
|
14
|
+
after some simple testings with the new nginx tasks
|
15
|
+
and unicorn tasks, which wrapping signal tasks to
|
16
|
+
manage processes with a pid file.
|
17
|
+
|
18
|
+
there's no much difference between nginx tasks and
|
19
|
+
unicorn tasks. to name a few, the process name,
|
20
|
+
config path, and pid path. (plus a ENV option for rack/rails)
|
21
|
+
|
22
|
+
that is, rake $ (-- is this Haskell favor i suppose? i mean, $)
|
23
|
+
app:signal:start # => start a process unless pid file existed
|
24
|
+
app:signal:stop # => send TERM to a process, ignore all errors
|
25
|
+
app:signal:restart # => stop + start
|
26
|
+
app:singal:reload # => same as stop, but send HUP instead
|
27
|
+
app:singal:kill # send any signal as your wish
|
28
|
+
|
29
|
+
then i would start migrating all services from passenger
|
30
|
+
to unicorn afterward as i promised to Eric Wong.
|
31
|
+
|
32
|
+
*
|
33
|
+
|
34
|
+
mogilefs-client and unicorn are both well written.
|
35
|
+
i'm an old fogey with large fonts too :p
|
36
|
+
there are so many websites with horrible layouts on
|
37
|
+
my browsers... especially on safari. firefox is a bit
|
38
|
+
better about this. (words won't get overlapped sometimes)
|
39
|
+
|
40
|
+
i should try to learn some styles from those two libs.
|
41
|
+
and ramaze and innate, i guess.
|
42
|
+
|
3
43
|
== app-deploy 0.6.0 / 2009-12-14
|
4
44
|
* first release to gemcutter
|
5
45
|
|
data/README
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
= app-deploy 0.
|
1
|
+
= app-deploy 0.7
|
2
2
|
by Lin Jen-Shin (aka godfat-真常[http://godfat.org])
|
3
3
|
godfat (XD) godfat.org
|
4
4
|
|
@@ -13,7 +13,7 @@ by Lin Jen-Shin (aka godfat-真常[http://godfat.org])
|
|
13
13
|
== FEATURES:
|
14
14
|
|
15
15
|
$ rake -T app
|
16
|
-
(in /
|
16
|
+
(in /Users/godfat/project/godfat/app-deploy)
|
17
17
|
rake app:daemon:restart[config] # restart the daemon cluster
|
18
18
|
rake app:daemon:start[config] # start the daemon cluster
|
19
19
|
rake app:daemon:stop[config] # stop the daemon cluster
|
@@ -36,14 +36,25 @@ rake app:install:remote:setup[user,file,hosts,script] # upload a tarball and un
|
|
36
36
|
rake app:install:remote:sh[hosts,script] # invoke a shell script on remote machines
|
37
37
|
rake app:install:remote:upload[file,hosts,path] # upload a file to remote machines
|
38
38
|
rake app:install:remote:useradd[user,hosts,script] # create a user on remote machines
|
39
|
+
rake app:nginx:kill[signal] # send a signal to nginx
|
39
40
|
rake app:nginx:reload # reload config
|
40
|
-
rake app:nginx:restart
|
41
|
-
rake app:nginx:start[config,nginx] # start nginx, default config is config/nginx.conf
|
41
|
+
rake app:nginx:restart[config,nginx,timeout] # restart nginx
|
42
|
+
rake app:nginx:start[config,nginx] # start nginx, default config is config/nginx.conf
|
42
43
|
rake app:nginx:stop[timeout] # stop nginx
|
43
44
|
rake app:rack:restart[config] # restart the rack cluster
|
44
45
|
rake app:rack:start[config] # start the rack cluster
|
45
46
|
rake app:rack:stop[config] # stop the rack cluster
|
46
47
|
rake app:server:restart # please define your server:restart task
|
48
|
+
rake app:signal:kill[signal,pidfile,name] # send a signal to a process with a pidfile
|
49
|
+
rake app:signal:reload[pidfile,name] # send HUP to a process with a pidfile
|
50
|
+
rake app:signal:restart[script,pidfile,timeout,name] # restart a process with a pidfile
|
51
|
+
rake app:signal:start[script,pidfile] # execute a script if pidfile is not existed
|
52
|
+
rake app:signal:stop[pidfile,timeout,name] # terminate a process with a pidfile
|
53
|
+
rake app:unicorn:kill[signal] # send a signal to unicorn
|
54
|
+
rake app:unicorn:reload # reload config
|
55
|
+
rake app:unicorn:restart[config,env,unicorn,timeout] # restart unicorn
|
56
|
+
rake app:unicorn:start[config,env,unicorn] # start unicorn, default config is config/unicorn.rb
|
57
|
+
rake app:unicorn:stop[timeout] # stop unicorn
|
47
58
|
|
48
59
|
== SYNOPSIS:
|
49
60
|
|
data/TODO
CHANGED
data/app-deploy.gemspec
CHANGED
@@ -2,33 +2,32 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{app-deploy}
|
5
|
-
s.version = "0.
|
5
|
+
s.version = "0.6.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Lin Jen-Shin (
|
9
|
-
s.date = %q{2009-
|
10
|
-
s.description = %q{rake tasks for deployment}
|
8
|
+
s.authors = ["Lin Jen-Shin (aka godfat 真常)"]
|
9
|
+
s.date = %q{2009-12-16}
|
10
|
+
s.description = %q{ rake tasks for deployment}
|
11
11
|
s.email = %q{godfat (XD) godfat.org}
|
12
|
-
s.extra_rdoc_files = ["CHANGES", "README", "TODO", "app-deploy.gemspec", "example/daemon_cluster.yaml", "example/rack_cluster.yaml", "lib/app-deploy/daemon.rake", "lib/app-deploy/deploy.rake", "lib/app-deploy/
|
13
|
-
s.files = ["CHANGES", "README", "Rakefile", "TODO", "app-deploy.gemspec", "example/Rakefile", "example/daemon_cluster.yaml", "example/rack_cluster.yaml", "lib/app-deploy.rb", "lib/app-deploy/daemon.rake", "lib/app-deploy/daemon.rb", "lib/app-deploy/daemon_cluster.rb", "lib/app-deploy/deploy.rake", "lib/app-deploy/
|
14
|
-
s.has_rdoc = true
|
12
|
+
s.extra_rdoc_files = ["CHANGES", "README", "Rakefile", "TODO", "app-deploy.gemspec", "example/Rakefile", "example/bin/install.sh", "example/bin/remote_install.sh", "example/bin/remote_update.sh", "example/bin/start.sh", "example/bin/update.sh", "example/daemon_cluster.yaml", "example/rack_cluster.yaml", "lib/app-deploy/daemon.rake", "lib/app-deploy/deploy.rake", "lib/app-deploy/deprecated/merb.rake", "lib/app-deploy/deprecated/mongrel.rake", "lib/app-deploy/gem.rake", "lib/app-deploy/git.rake", "lib/app-deploy/install.rake", "lib/app-deploy/nginx.rake", "lib/app-deploy/rack.rake", "lib/app-deploy/server.rake", "lib/app-deploy/signal.rake", "lib/app-deploy/thin.rake", "lib/app-deploy/unicorn.rake"]
|
13
|
+
s.files = ["CHANGES", "README", "Rakefile", "TODO", "app-deploy.gemspec", "example/Rakefile", "example/bin/install.sh", "example/bin/remote_install.sh", "example/bin/remote_update.sh", "example/bin/start.sh", "example/bin/update.sh", "example/daemon_cluster.yaml", "example/rack_cluster.yaml", "lib/app-deploy.rb", "lib/app-deploy/daemon.rake", "lib/app-deploy/daemon.rb", "lib/app-deploy/daemon_cluster.rb", "lib/app-deploy/deploy.rake", "lib/app-deploy/deprecated/merb.rake", "lib/app-deploy/deprecated/mongrel.rake", "lib/app-deploy/gem.rake", "lib/app-deploy/git.rake", "lib/app-deploy/install.rake", "lib/app-deploy/nginx.rake", "lib/app-deploy/rack.rake", "lib/app-deploy/rack_cluster.rb", "lib/app-deploy/server.rake", "lib/app-deploy/signal.rake", "lib/app-deploy/thin.rake", "lib/app-deploy/unicorn.rake", "lib/app-deploy/utils.rb", "lib/app-deploy/version.rb"]
|
15
14
|
s.homepage = %q{http://github.com/godfat/app-deploy}
|
16
|
-
s.rdoc_options = ["--
|
15
|
+
s.rdoc_options = ["--main", "README"]
|
17
16
|
s.require_paths = ["lib"]
|
18
|
-
s.rubyforge_project = %q{
|
19
|
-
s.rubygems_version = %q{1.3.
|
17
|
+
s.rubyforge_project = %q{app-deploy}
|
18
|
+
s.rubygems_version = %q{1.3.5}
|
20
19
|
s.summary = %q{rake tasks for deployment}
|
21
20
|
|
22
21
|
if s.respond_to? :specification_version then
|
23
22
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
-
s.specification_version =
|
23
|
+
s.specification_version = 3
|
25
24
|
|
26
25
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_development_dependency(%q<bones>, [">= 2.
|
26
|
+
s.add_development_dependency(%q<bones>, [">= 3.2.0"])
|
28
27
|
else
|
29
|
-
s.add_dependency(%q<bones>, [">= 2.
|
28
|
+
s.add_dependency(%q<bones>, [">= 3.2.0"])
|
30
29
|
end
|
31
30
|
else
|
32
|
-
s.add_dependency(%q<bones>, [">= 2.
|
31
|
+
s.add_dependency(%q<bones>, [">= 3.2.0"])
|
33
32
|
end
|
34
33
|
end
|
data/example/Rakefile
CHANGED
@@ -4,20 +4,12 @@ begin
|
|
4
4
|
rescue LoadError
|
5
5
|
puts "app-deploy not found, automaticly downloading and installing..."
|
6
6
|
|
7
|
-
gem_cmd = "#{Gem.ruby}
|
7
|
+
gem_cmd = "#{Gem.ruby} -S gem"
|
8
8
|
gem_opt = '--user-install --no-ri --no-rdoc'
|
9
9
|
gem_int = "#{gem_cmd} install #{gem_opt}"
|
10
10
|
|
11
|
-
sh "#{gem_int}
|
11
|
+
sh "#{gem_int} app-deploy"
|
12
12
|
|
13
|
-
sh 'git clone git://github.com/godfat/app-deploy.git app-deploy'
|
14
|
-
Dir.chdir 'app-deploy'
|
15
|
-
|
16
|
-
sh 'rake clobber'
|
17
|
-
sh 'rake gem:package'
|
18
|
-
sh "#{gem_int} --local pkg/app-deploy-*.gem"
|
19
|
-
|
20
|
-
Dir.chdir '..'
|
21
13
|
Gem.refresh
|
22
14
|
require 'app-deploy'
|
23
15
|
end
|
data/lib/app-deploy.rb
CHANGED
data/lib/app-deploy/nginx.rake
CHANGED
@@ -2,30 +2,40 @@
|
|
2
2
|
namespace :app do
|
3
3
|
namespace :nginx do
|
4
4
|
|
5
|
-
desc 'start nginx, default config is config/nginx.conf
|
5
|
+
desc 'start nginx, default config is config/nginx.conf'
|
6
6
|
task :start, [:config, :nginx] do |t, args|
|
7
|
-
#
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
sh "#{args[:nginx] || '/usr/sbin/nginx'} -c #{args[:config] || 'config/nginx.conf'}"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
desc 'reload config'
|
16
|
-
task :reload do
|
17
|
-
# sh 'kill -HUP `cat tmp/pids/nginx.pid`'
|
18
|
-
AppDeploy.hup('tmp/pids/nginx.pid', 'nginx')
|
7
|
+
ENV['script'] = " #{args[:nginx] || '/usr/sbin/nginx'}" +
|
8
|
+
" -c #{args[:config] || 'config/nginx.conf'}"
|
9
|
+
ENV['pidfile'] = 'tmp/pids/nginx.pid'
|
10
|
+
Rake::Task['app:signal:start'].invoke
|
19
11
|
end
|
20
12
|
|
21
13
|
desc 'stop nginx'
|
22
14
|
task :stop, [:timeout] do |t, args|
|
23
15
|
# sh "kill -TERM `cat tmp/pids/nginx.pid`"
|
24
|
-
|
16
|
+
ENV['pidfile'] = 'tmp/pids/nginx.pid'
|
17
|
+
ENV['timeout'] = args[:timeout]
|
18
|
+
ENV['name'] = 'nginx'
|
19
|
+
Rake::Task['app:signal:stop'].invoke
|
25
20
|
end
|
26
21
|
|
27
22
|
desc 'restart nginx'
|
28
|
-
task :restart => [:stop, :start]
|
23
|
+
task :restart, [:config, :nginx, :timeout] => [:stop, :start]
|
24
|
+
|
25
|
+
desc 'reload config'
|
26
|
+
task :reload do
|
27
|
+
# sh 'kill -HUP `cat tmp/pids/nginx.pid`'
|
28
|
+
ENV['signal'] = 'HUP'
|
29
|
+
Rake::Task['app:nginx:kill'].invoke
|
30
|
+
end
|
31
|
+
|
32
|
+
desc 'send a signal to nginx'
|
33
|
+
task :kill, [:signal] do |t, args|
|
34
|
+
ENV['signal'] = args[:signal]
|
35
|
+
ENV['pidfile'] = 'tmp/pids/nginx.pid'
|
36
|
+
ENV['name'] = 'nginx'
|
37
|
+
Rake::Task['app:signal:kill'].invoke
|
38
|
+
end
|
29
39
|
|
30
40
|
end # of nginx
|
31
41
|
end # of app
|
data/lib/app-deploy/signal.rake
CHANGED
@@ -2,29 +2,34 @@
|
|
2
2
|
namespace :app do
|
3
3
|
namespace :signal do
|
4
4
|
|
5
|
-
desc '
|
6
|
-
task :start, [:script, :
|
7
|
-
if File.exist?(args[:
|
8
|
-
puts "WARN: pid file #{args[:
|
5
|
+
desc 'execute a script if pidfile is not existed'
|
6
|
+
task :start, [:script, :pidfile] do |t, args|
|
7
|
+
if File.exist?(args[:pidfile])
|
8
|
+
puts "WARN: pid file #{args[:pidfile]} already exists, ignoring."
|
9
9
|
else
|
10
10
|
sh args[:script]
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
desc '
|
15
|
-
task :
|
16
|
-
# sh
|
17
|
-
AppDeploy.
|
14
|
+
desc 'terminate a process with a pidfile'
|
15
|
+
task :stop, [:pidfile, :timeout, :name] do |t, args|
|
16
|
+
# sh "kill -TERM `cat tmp/pids/nginx.pid`"
|
17
|
+
AppDeploy.term(args[:pidfile], args[:name], args[:timeout] || 5)
|
18
18
|
end
|
19
19
|
|
20
|
-
desc '
|
21
|
-
task :
|
22
|
-
|
23
|
-
|
20
|
+
desc 'restart a process with a pidfile'
|
21
|
+
task :restart, [:script, :pidfile, :timeout, :name] => [:stop, :start]
|
22
|
+
|
23
|
+
desc 'send HUP to a process with a pidfile'
|
24
|
+
task :reload, [:pidfile, :name] do
|
25
|
+
# sh 'kill -HUP `cat tmp/pids/nginx.pid`'
|
26
|
+
AppDeploy.kill_pidfile('HUP', args[:pidfile], args[:name])
|
24
27
|
end
|
25
28
|
|
26
|
-
desc '
|
27
|
-
task :
|
29
|
+
desc 'send a signal to a process with a pidfile'
|
30
|
+
task :kill, [:signal, :pidfile, :name] do |t, args|
|
31
|
+
AppDeploy.kill_pidfile(args[:signal], args[:pidfile], args[:name])
|
32
|
+
end
|
28
33
|
|
29
|
-
end # of
|
34
|
+
end # of signal
|
30
35
|
end # of app
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
namespace :app do
|
3
|
+
namespace :unicorn do
|
4
|
+
|
5
|
+
desc 'start unicorn, default config is config/unicorn.rb'
|
6
|
+
task :start, [:config, :env, :unicorn] do |t, args|
|
7
|
+
ENV['script'] = "#{args[:unicorn] || 'unicorn'} -D" +
|
8
|
+
" -c #{args[:config] || 'config/unicorn.rb'}" +
|
9
|
+
" -E #{args[:env] || 'production'}"
|
10
|
+
ENV['pidfile'] = 'tmp/pids/unicorn.pid'
|
11
|
+
Rake::Task['app:signal:start'].invoke
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'stop unicorn'
|
15
|
+
task :stop, [:timeout] do |t, args|
|
16
|
+
# sh "kill -TERM `cat tmp/pids/unicorn.pid`"
|
17
|
+
ENV['pidfile'] = 'tmp/pids/unicorn.pid'
|
18
|
+
ENV['timeout'] = args[:timeout]
|
19
|
+
ENV['name'] = 'unicorn'
|
20
|
+
Rake::Task['app:signal:stop'].invoke
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'restart unicorn'
|
24
|
+
task :restart, [:config, :env, :unicorn, :timeout] => [:stop, :start]
|
25
|
+
|
26
|
+
desc 'reload config'
|
27
|
+
task :reload do
|
28
|
+
# sh 'kill -HUP `cat tmp/pids/unicorn.pid`'
|
29
|
+
ENV['signal'] = 'HUP'
|
30
|
+
Rake::Task['app:unicorn:kill'].invoke
|
31
|
+
end
|
32
|
+
|
33
|
+
desc 'send a signal to unicorn'
|
34
|
+
task :kill, [:signal] do |t, args|
|
35
|
+
ENV['signal'] = args[:signal]
|
36
|
+
ENV['pidfile'] = 'tmp/pids/unicorn.pid'
|
37
|
+
ENV['name'] = 'unicorn'
|
38
|
+
Rake::Task['app:signal:kill'].invoke
|
39
|
+
end
|
40
|
+
|
41
|
+
end # of unicorn
|
42
|
+
end # of app
|
data/lib/app-deploy/utils.rb
CHANGED
@@ -145,45 +145,49 @@ module AppDeploy
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
|
148
|
-
def term pid_path, name = nil, limit = 5
|
149
|
-
if pid = AppDeploy.read_pid(pid_path)
|
150
|
-
puts "Sending TERM to #{name}(#{pid})..."
|
151
|
-
|
152
|
-
else
|
153
|
-
return
|
154
|
-
|
155
|
-
end
|
156
|
-
|
148
|
+
def term pid_path, name = nil, limit = 5, wait = 0.1
|
157
149
|
require 'timeout'
|
158
|
-
|
159
|
-
|
150
|
+
pid = AppDeploy.kill_pidfile('TERM', pid_path, name)
|
151
|
+
timeout(limit){
|
152
|
+
if pid
|
160
153
|
while true
|
161
154
|
Process.kill('TERM', pid)
|
162
|
-
sleep(
|
155
|
+
sleep(wait)
|
163
156
|
end
|
164
|
-
}
|
165
|
-
rescue Errno::ESRCH
|
166
|
-
if File.exist?(pid_path)
|
167
|
-
puts "WARN: No such pid: #{pid}, removing #{pid_path}..."
|
168
|
-
File.delete(pid_path)
|
169
|
-
else
|
170
|
-
puts "Killed #{name}(#{pid})"
|
171
157
|
end
|
158
|
+
}
|
159
|
+
rescue Errno::ESRCH
|
160
|
+
puts "Killed #{name}(#{pid})"
|
172
161
|
|
173
|
-
|
174
|
-
|
162
|
+
rescue Timeout::Error
|
163
|
+
puts "Timeout(#{limit}) killing #{name}(#{pid})"
|
175
164
|
|
176
|
-
end
|
177
165
|
end
|
178
166
|
|
179
|
-
def
|
167
|
+
def kill_pidfile signal, pid_path, name = nil
|
180
168
|
if pid = AppDeploy.read_pid(pid_path)
|
181
|
-
|
182
|
-
|
169
|
+
AppDeploy.kill_raise(signal, pid, name)
|
170
|
+
return pid
|
183
171
|
end
|
172
|
+
nil
|
184
173
|
rescue Errno::ESRCH
|
185
174
|
puts "WARN: No such pid: #{pid}, removing #{pid_path}..."
|
186
175
|
File.delete(pid_path)
|
176
|
+
nil
|
177
|
+
end
|
178
|
+
|
179
|
+
def kill_pid signal, pid, name = nil
|
180
|
+
AppDeploy.kill_raise(signal, pid, name)
|
181
|
+
pid
|
182
|
+
rescue Errno::ESRCH
|
183
|
+
puts "WARN: No such pid: #{pid}"
|
184
|
+
nil
|
185
|
+
end
|
186
|
+
|
187
|
+
def kill_raise signal, pid, name = nil
|
188
|
+
puts "Sending #{signal} to #{name}(#{pid})..."
|
189
|
+
Process.kill(signal, pid)
|
190
|
+
pid
|
187
191
|
end
|
188
192
|
|
189
193
|
end
|
data/lib/app-deploy/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: app-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Lin Jen-Shin (aka godfat \xE7\x9C\x9F\xE5\xB8\xB8)"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-16 00:00:00 +08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -54,6 +54,7 @@ extra_rdoc_files:
|
|
54
54
|
- lib/app-deploy/server.rake
|
55
55
|
- lib/app-deploy/signal.rake
|
56
56
|
- lib/app-deploy/thin.rake
|
57
|
+
- lib/app-deploy/unicorn.rake
|
57
58
|
files:
|
58
59
|
- CHANGES
|
59
60
|
- README
|
@@ -84,6 +85,7 @@ files:
|
|
84
85
|
- lib/app-deploy/server.rake
|
85
86
|
- lib/app-deploy/signal.rake
|
86
87
|
- lib/app-deploy/thin.rake
|
88
|
+
- lib/app-deploy/unicorn.rake
|
87
89
|
- lib/app-deploy/utils.rb
|
88
90
|
- lib/app-deploy/version.rb
|
89
91
|
has_rdoc: true
|