daemontools 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/daemontools-gen +13 -0
- data/lib/daemontools.rb +1 -0
- data/lib/daemontools/capistrano.rb +34 -0
- data/lib/daemontools/service_builder.rb +50 -0
- data/lib/daemontools/version.rb +1 -1
- data/templates/log.erb +6 -0
- data/templates/run.erb +5 -0
- metadata +11 -5
data/bin/daemontools-gen
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift File.expand_path('../lib', File.dirname(__FILE__))
|
4
|
+
require 'daemontools'
|
5
|
+
|
6
|
+
environment = ARGV[0] || "production"
|
7
|
+
roles = ARGV[1] || ""
|
8
|
+
puts "Building svc services.."
|
9
|
+
|
10
|
+
builder = Daemontools::Builder.new("#{Dir.pwd}/config/services.rb")
|
11
|
+
p builder.all_roles
|
12
|
+
|
13
|
+
builder.gen(roles, environment)
|
data/lib/daemontools.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace :daemontools do
|
3
|
+
desc "Update daemontools services using services.rb"
|
4
|
+
task :update do
|
5
|
+
builder = Daemontools::Builder.new("#{Dir.pwd}/config/services.rb")
|
6
|
+
|
7
|
+
servers = find_servers.inject({}) do |map, server|
|
8
|
+
map[server] = role_names_for_host(server) & builder.all_roles
|
9
|
+
map
|
10
|
+
end.select {|server, roles| roles.size > 0}
|
11
|
+
|
12
|
+
if servers.any?
|
13
|
+
if task_call_frames[0].task.fully_qualified_name == 'deploy:rollback'
|
14
|
+
path = fetch(:previous_release)
|
15
|
+
puts "rollback 1"
|
16
|
+
else
|
17
|
+
path = fetch(:release_path)
|
18
|
+
|
19
|
+
servers.each do |server, roles|
|
20
|
+
command = "cd #{path} && daemontools-gen #{fetch :rails_env, "production"} #{roles.join(',')}"
|
21
|
+
run command
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
on_rollback do
|
26
|
+
puts "rollback 2"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
before "deploy:finalize_update", "daemontools:update"
|
33
|
+
after "deploy:rollback", "daemontools:update"
|
34
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Daemontools
|
2
|
+
class Builder
|
3
|
+
attr_accessor :environment, :all_roles, :services, :curr_service_name
|
4
|
+
|
5
|
+
def initialize(filename)
|
6
|
+
@all_roles = []
|
7
|
+
@services = {}
|
8
|
+
eval(File.read(filename), binding())
|
9
|
+
end
|
10
|
+
|
11
|
+
def run_command(command_name, param)
|
12
|
+
self.class.send(:define_method, command_name) do |task, options = {}|
|
13
|
+
p = param.gsub(':task', task)
|
14
|
+
options.each {|key, val| p.gsub!(":#{key}", val.to_s) }
|
15
|
+
command(p, options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def command(param, options = {})
|
20
|
+
Daemontools.stop(@curr_service_name) if Daemontools.exists?(@curr_service_name)
|
21
|
+
cmd = "/bin/bash -l -c '#{param.gsub(':environment', @environment)}' 2>&1"
|
22
|
+
Daemontools.add(@curr_service_name, cmd)
|
23
|
+
Daemontools.make_run_status_up(@curr_service_name)
|
24
|
+
Daemontools.start(@curr_service_name)
|
25
|
+
end
|
26
|
+
|
27
|
+
def service(name, opts = {}, &block)
|
28
|
+
if opts[:roles]
|
29
|
+
opts[:roles].each do |role|
|
30
|
+
role = role.to_sym
|
31
|
+
@all_roles << role unless @all_roles.member?(role)
|
32
|
+
@services[role] = [] unless @services[role]
|
33
|
+
@services[role] << [name, block]
|
34
|
+
end
|
35
|
+
else
|
36
|
+
raise "service without roles"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def gen(roles, env)
|
41
|
+
@environment = env
|
42
|
+
roles.split(',').each do |role|
|
43
|
+
(@services[role.to_sym] || []).each do |service|
|
44
|
+
@curr_service_name = service[0].to_s
|
45
|
+
service[1].call
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/daemontools/version.rb
CHANGED
data/templates/log.erb
ADDED
data/templates/run.erb
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daemontools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -46,7 +46,8 @@ dependencies:
|
|
46
46
|
description: Distributed storage
|
47
47
|
email:
|
48
48
|
- cntyrf@gmail.com
|
49
|
-
executables:
|
49
|
+
executables:
|
50
|
+
- daemontools-gen
|
50
51
|
extensions: []
|
51
52
|
extra_rdoc_files: []
|
52
53
|
files:
|
@@ -55,9 +56,14 @@ files:
|
|
55
56
|
- LICENSE.txt
|
56
57
|
- README.md
|
57
58
|
- Rakefile
|
59
|
+
- bin/daemontools-gen
|
58
60
|
- daemontools.gemspec
|
59
61
|
- lib/daemontools.rb
|
62
|
+
- lib/daemontools/capistrano.rb
|
63
|
+
- lib/daemontools/service_builder.rb
|
60
64
|
- lib/daemontools/version.rb
|
65
|
+
- templates/log.erb
|
66
|
+
- templates/run.erb
|
61
67
|
homepage: ''
|
62
68
|
licenses: []
|
63
69
|
post_install_message:
|
@@ -72,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
78
|
version: '0'
|
73
79
|
segments:
|
74
80
|
- 0
|
75
|
-
hash:
|
81
|
+
hash: -4588921154621621218
|
76
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
83
|
none: false
|
78
84
|
requirements:
|
@@ -81,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
87
|
version: '0'
|
82
88
|
segments:
|
83
89
|
- 0
|
84
|
-
hash:
|
90
|
+
hash: -4588921154621621218
|
85
91
|
requirements: []
|
86
92
|
rubyforge_project:
|
87
93
|
rubygems_version: 1.8.24
|