necktie 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +7 -0
- data/README.rdoc +5 -0
- data/example/tasks/app.rb +14 -14
- data/example/tasks/current.rb +27 -22
- data/example/tasks/db.rb +2 -2
- data/lib/necktie/application.rb +1 -1
- data/lib/necktie/capistrano.rb +1 -1
- data/lib/necktie/services.rb +14 -10
- data/necktie.gemspec +2 -2
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
1.0.2
|
2
|
+
* Added services.reload and improved read time for services.running?
|
3
|
+
* Example now uses more file tasks for conditional updates.
|
4
|
+
* Command line option --env becomes --environment.
|
5
|
+
* Fix to cap necktie task, and using --trace by default.
|
6
|
+
* Updated examples based on tasks we're using in production.
|
7
|
+
|
1
8
|
1.0.1 (2009-10-16)
|
2
9
|
* Improvements to RDoc.
|
3
10
|
* Necktie module helps with documentation and usage.
|
data/README.rdoc
CHANGED
@@ -147,6 +147,9 @@ the default task instead of setting ROLES each time. In your Necktie file add:
|
|
147
147
|
You may also want to take advantage of different environments, customizing your
|
148
148
|
setup differently between production, staging, etc.
|
149
149
|
|
150
|
+
Check the example directory for ideas on how to split large configurations into
|
151
|
+
smaller files and tasks.
|
152
|
+
|
150
153
|
Note: As with Rake, command line arguments are either options (see necktie -H),
|
151
154
|
task names (executed in order), or name=value pairs that set environment
|
152
155
|
variables (e.g. RAILS_ENV=production).
|
@@ -210,3 +213,5 @@ http://rush.heroku.com http://github.com/adamwiggins/rush
|
|
210
213
|
Includes Session, created by Ara T. Howard and released under the Ruby License
|
211
214
|
http://raa.ruby-lang.org/project/session
|
212
215
|
http://www.codeforpeople.com/lib/ruby/session
|
216
|
+
|
217
|
+
Developed for managing EC2 instances for http://apartly.com
|
data/example/tasks/app.rb
CHANGED
@@ -20,30 +20,30 @@ task :memcached do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
# Install init.d script to manage Unicorn, before we can start it.
|
23
|
+
file "/etc/init.d/unicorn"=>"etc/init.d/unicorn" do
|
25
24
|
cp "etc/init.d/unicorn", "/etc/init.d/"
|
25
|
+
update "/etc/init.d/unicorn", /^ENV=.*$/, "ENV=#{Necktie.env}"
|
26
26
|
chmod 0755, "/etc/init.d/unicorn"
|
27
|
-
services.
|
27
|
+
services.restart "unicorn"
|
28
28
|
end
|
29
|
+
task :unicorn=>[:rubygems, "#{@deploy_to}/current", "/etc/initd.unicorn"]
|
29
30
|
|
30
|
-
|
31
|
+
file "/etc/nginx/sites-available/unicorn.conf"=>"etc/nginx/unicorn.conf" do
|
31
32
|
# We only care about one Nginx configuration, so enable it and disable all others.
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
services.start "nginx"
|
37
|
-
end
|
33
|
+
rm_rf Dir["/etc/nginx/sites-enabled/*"]
|
34
|
+
cp "etc/nginx/unicorn.conf", "/etc/nginx/sites-available/"
|
35
|
+
ln_sf "/etc/nginx/sites-available/unicorn.conf", "/etc/nginx/sites-enabled/"
|
36
|
+
sh "service nginx reload"
|
38
37
|
end
|
38
|
+
task :nginx=>[:unicorn, "/etc/nginx/sites-available/unicorn.conf"
|
39
39
|
|
40
|
-
task :
|
40
|
+
task :postfix do
|
41
41
|
# Have postfix send emails on behalf of our host, and start it.
|
42
|
-
unless
|
42
|
+
unless read("/etc/postfix/main.cf")[@hostname]
|
43
43
|
update "/etc/postfix/main.cf", /^myhostname\s*=.*$/, "myhostname = #{@hostname}"
|
44
44
|
write "/etc/mailname", @hostname
|
45
|
-
services.
|
45
|
+
services.restart "postfix"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
task :app=>[:environment, :memcached, :nginx, :
|
49
|
+
task :app=>[:environment, :memcached, :unicorn, :nginx, :postfix]
|
data/example/tasks/current.rb
CHANGED
@@ -1,16 +1,11 @@
|
|
1
1
|
user, group = "nginx", "nginx"
|
2
|
-
|
3
2
|
shared_path = "#{@deploy_to}/shared"
|
4
3
|
cached_copy = "#{shared_path}/cached-copy"
|
5
4
|
releases_path = "#{@deploy_to}/releases"
|
6
|
-
release = Time.now.utc.strftime("%Y%m%d%H%M%S")
|
7
|
-
release_path = "#{releases_path}/#{release}"
|
8
5
|
current_path = "#{@deploy_to}/current"
|
9
6
|
|
10
7
|
file @deploy_to do
|
11
8
|
mkdir_p @deploy_to
|
12
|
-
chown user, group, @deploy_to
|
13
|
-
chmod 0770, @deploy_to
|
14
9
|
end
|
15
10
|
|
16
11
|
file shared_path=>@deploy_to do
|
@@ -19,31 +14,41 @@ file shared_path=>@deploy_to do
|
|
19
14
|
chmod_R 0770, shared_path
|
20
15
|
end
|
21
16
|
|
17
|
+
file cached_copy=>shared_path do
|
18
|
+
sh "git clone #{@git_url} #{cached_copy}"
|
19
|
+
chown_R user, group, cached_copy
|
20
|
+
end
|
21
|
+
|
22
22
|
file releases_path=>@deploy_to do
|
23
23
|
mkdir_p releases_path
|
24
24
|
chown user, group, releases_path
|
25
25
|
chmod 0770, releases_path
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
task :release=>[releases_path, cached_copy] do
|
29
|
+
sha = bash("git --git-dir=#{cached_copy}/.git rev-parse --verify HEAD")
|
30
|
+
latest = Dir["#{releases_path}/*/REVISION"].find { |f| File.read(f)[sha] }
|
31
|
+
if latest
|
32
|
+
@release_path = File.dirname(latest)
|
33
|
+
else
|
34
|
+
@release_path = "#{releases_path}/#{Time.now.utc.strftime("%Y%m%d%H%M%S")}"
|
35
|
+
cp_r cached_copy, @release_path
|
36
|
+
write "#{@release_path}/REVISION", sha
|
37
|
+
|
38
|
+
rm_rf ["#{@release_path}/log", "#{@release_path}/public/system", "#{@release_path}/tmp/pids"]
|
39
|
+
mkdir_p ["#{@release_path}/public", "#{@release_path}/tmp", "#{@release_path}/tmp/cache",
|
40
|
+
"#{@release_path}/tmp/sockets", "#{@release_path}/tmp/sessions"]
|
41
|
+
ln_s "#{shared_path}/log", "#{@release_path}/log"
|
42
|
+
ln_s "#{shared_path}/system", "#{@release_path}/public/system"
|
43
|
+
ln_s "#{shared_path}/pids", "#{@release_path}/tmp/pids"
|
32
44
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
write "#{release_path}/REVISION", revision
|
37
|
-
touch release_path
|
38
|
-
sh "chmod -R g+w #{release_path}"
|
39
|
-
rm_rf ["#{release_path}/log", "#{release_path}/public/system", "#{release_path}/tmp/pids"]
|
40
|
-
mkdir_p ["#{release_path}/public", "#{release_path}/tmp"]
|
41
|
-
ln_s "#{shared_path}/log", "#{release_path}/log"
|
42
|
-
ln_s "#{shared_path}/system", "#{release_path}/public/system"
|
43
|
-
ln_s "#{shared_path}/pids", "#{release_path}/tmp/pids"
|
45
|
+
chown_R user, group, @release_path
|
46
|
+
sh "chmod -R g+w #{@release_path}"
|
47
|
+
end
|
44
48
|
end
|
45
49
|
|
46
|
-
file current_path=>[
|
50
|
+
file current_path=>[:release, shared_path] do
|
47
51
|
rm_f current_path
|
48
|
-
ln_s release_path, current_path
|
52
|
+
ln_s @release_path, current_path
|
53
|
+
chown user, group, current_path
|
49
54
|
end
|
data/example/tasks/db.rb
CHANGED
data/lib/necktie/application.rb
CHANGED
data/lib/necktie/capistrano.rb
CHANGED
@@ -8,6 +8,6 @@ Capistrano::Configuration.instance.load do
|
|
8
8
|
upload gem_file, File.basename(gem_file), :via=>:scp
|
9
9
|
sudo "gem install #{File.basename(gem_file)}"
|
10
10
|
tasks = ENV["ROLES"].to_s.split(",") # ROLES => task names
|
11
|
-
sudo "necktie --source #{necktie_url} --update --environment #{fetch(:rails_env, "production")} #{
|
11
|
+
sudo "necktie --source #{necktie_url} --update --environment #{fetch(:rails_env, "production")} #{tasks.join(" ")} --trace"
|
12
12
|
end
|
13
13
|
end
|
data/lib/necktie/services.rb
CHANGED
@@ -5,9 +5,8 @@ module Necktie
|
|
5
5
|
# service <name> start
|
6
6
|
def start(name)
|
7
7
|
puts " ** Starting service #{name}"
|
8
|
-
|
9
|
-
|
10
|
-
fail "failed to start #{name}"
|
8
|
+
sh "update-rc.d #{name} defaults"
|
9
|
+
sh "service #{name} start"
|
11
10
|
end
|
12
11
|
|
13
12
|
# Enables service to run after boot.
|
@@ -20,29 +19,34 @@ module Necktie
|
|
20
19
|
# update_rc.d <name> remove
|
21
20
|
def stop(name)
|
22
21
|
puts " ** Stopping service #{name}"
|
23
|
-
|
24
|
-
|
25
|
-
fail "failed to stop #{name}"
|
22
|
+
sh "service #{name} stop"
|
23
|
+
sh "update-rc.d -f #{name} remove"
|
26
24
|
end
|
27
25
|
|
28
26
|
# Disables service from running after boot.
|
29
27
|
def disable(name)
|
30
|
-
|
28
|
+
sh "update-rc.d -f #{name} remove"
|
31
29
|
end
|
32
30
|
|
33
31
|
# Restart service. Same as:
|
34
32
|
# service <name> restart
|
35
33
|
def restart(name)
|
36
34
|
puts " ** Restarting service #{name}"
|
37
|
-
|
35
|
+
sh "service #{name} restart"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Reload configuration. Same as:
|
39
|
+
# service <name> reload
|
40
|
+
def reload(name)
|
41
|
+
sh "service #{name} reload"
|
38
42
|
end
|
39
43
|
|
40
44
|
# Checks if service is running. Returns true or false based on the outcome
|
41
45
|
# of service <name> status, and nil if service doesn't have a status command.
|
42
46
|
# (Note: Not all services report their running state, or do so reliably)
|
43
47
|
def running?(name)
|
44
|
-
status = File.read("|service
|
45
|
-
status
|
48
|
+
status = File.read("|service #{name} status 2>&1")
|
49
|
+
status[/is running/] ? true : status[/is not running/] ? false : status.empty? ? false : nil;
|
46
50
|
end
|
47
51
|
end
|
48
52
|
end
|
data/necktie.gemspec
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
Gem::Specification.new do |spec|
|
2
2
|
spec.name = "necktie"
|
3
|
-
spec.version = "1.0.
|
3
|
+
spec.version = "1.0.2"
|
4
4
|
spec.author = "Assaf Arkin"
|
5
5
|
spec.email = "assaf@labnotes.org"
|
6
6
|
spec.homepage = "http://github.com/assaf/necktie"
|
7
7
|
spec.summary = "Dress to impress"
|
8
8
|
spec.description = "Configure your servers remotely using Ruby and Git"
|
9
9
|
|
10
|
-
spec.files = Dir["{bin,lib,vendor,example}/**/*", "
|
10
|
+
spec.files = Dir["{bin,lib,vendor,example}/**/*", "CHANGELOG", "README.rdoc", "necktie.gemspec"]
|
11
11
|
spec.executable = "necktie"
|
12
12
|
|
13
13
|
spec.has_rdoc = true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: necktie
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Assaf Arkin
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-20 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -245,9 +245,9 @@ files:
|
|
245
245
|
- example/tasks/app.rb
|
246
246
|
- example/tasks/current.rb
|
247
247
|
- example/tasks/db.rb
|
248
|
-
- necktie.gemspec
|
249
|
-
- README.rdoc
|
250
248
|
- CHANGELOG
|
249
|
+
- README.rdoc
|
250
|
+
- necktie.gemspec
|
251
251
|
has_rdoc: true
|
252
252
|
homepage: http://github.com/assaf/necktie
|
253
253
|
licenses: []
|