asmodai 0.1.7 → 0.1.8
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.
- data/Gemfile +3 -0
- data/Gemfile.lock +22 -0
- data/Rakefile +2 -0
- data/bin/asmodai +14 -5
- data/lib/asmodai.rb +4 -0
- data/lib/asmodai/cli.rb +7 -17
- data/lib/asmodai/daemon.rb +20 -12
- data/lib/asmodai/generator/templates/Gemfile +4 -1
- data/lib/asmodai/generator/templates/asmodai.erb +12 -0
- data/lib/asmodai/generator/templates/init_d.erb +13 -16
- data/lib/asmodai/info.rb +22 -13
- data/lib/asmodai/version.rb +1 -1
- data/test/daemon_test.rb +3 -0
- data/test/test_helper.rb +0 -1
- metadata +12 -32
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
asmodai (0.1.8)
|
5
|
+
activesupport (>= 3.0.3)
|
6
|
+
bundler (>= 1.0.9)
|
7
|
+
i18n (>= 0.5.0)
|
8
|
+
thor (>= 0.14.6)
|
9
|
+
|
10
|
+
GEM
|
11
|
+
remote: http://rubygems.org/
|
12
|
+
specs:
|
13
|
+
activesupport (3.0.7)
|
14
|
+
i18n (0.6.0)
|
15
|
+
thor (0.14.6)
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
activesupport (>= 3.0.3)
|
22
|
+
asmodai!
|
data/Rakefile
CHANGED
data/bin/asmodai
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
if File.exist?('./script/asmodai')
|
4
|
+
exec './script/asmodai', *ARGV
|
5
|
+
else
|
6
|
+
require 'thor'
|
7
|
+
require 'thor/actions'
|
8
|
+
require 'thor/group'
|
9
|
+
require 'active_support/core_ext'
|
10
|
+
require 'asmodai'
|
11
|
+
require 'asmodai/cli'
|
5
12
|
|
6
|
-
|
7
|
-
|
8
|
-
Asmodai
|
13
|
+
|
14
|
+
Asmodai.root = Pathname.new(Dir.pwd)
|
15
|
+
$LOAD_PATH.unshift(Asmodai.root.join("lib").to_s)
|
16
|
+
Asmodai::CLI.start
|
17
|
+
end
|
data/lib/asmodai.rb
CHANGED
data/lib/asmodai/cli.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
|
4
|
-
require 'active_support'
|
5
|
-
require 'active_support/core_ext'
|
6
|
-
|
7
|
-
class Asmodai::CLI < Thor
|
1
|
+
class Asmodai::CLI < ::Thor
|
2
|
+
require 'fileutils'
|
3
|
+
|
8
4
|
include Thor::Actions
|
9
5
|
attr_accessor :app_name
|
10
6
|
|
@@ -17,8 +13,12 @@ class Asmodai::CLI < Thor
|
|
17
13
|
@app_name=name
|
18
14
|
empty_directory "#{name}/log"
|
19
15
|
empty_directory "#{name}/lib"
|
16
|
+
empty_directory "#{name}/script"
|
20
17
|
template 'templates/daemon.rb.erb', "#{name}/#{name}.rb"
|
21
18
|
copy_file 'templates/Gemfile', "#{name}/Gemfile"
|
19
|
+
template 'templates/asmodai.erb', "#{name}/script/asmodai"
|
20
|
+
template 'templates/launcher.erb', "#{name}/script/launcher"
|
21
|
+
FileUtils.chmod 0755, "#{name}/script/asmodai"
|
22
22
|
end
|
23
23
|
|
24
24
|
desc "install", "Installs startup scripts to /etc/init.d"
|
@@ -29,17 +29,7 @@ class Asmodai::CLI < Thor
|
|
29
29
|
def install
|
30
30
|
@info = Asmodai::Info.current
|
31
31
|
@asmodai = "asmodai"
|
32
|
-
rvm_ruby_string = (ENV['rvm_ruby_string'] || "")
|
33
|
-
|
34
|
-
if @info.rvm_environment?
|
35
|
-
@asmodai=Pathname.new(@info.rvm_wrapper_path)
|
36
|
-
if !@asmodai.exist?
|
37
|
-
system "rvm wrapper #{@info.rvm_ruby_string} bootup asmodai"
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
32
|
path = "/etc/init.d/#{@info.daemon_name}"
|
42
|
-
|
43
33
|
IO.popen "sudo bash -c \"cat > #{path}; chmod a+x #{path}\"", "r+" do |io|
|
44
34
|
template_path = File.join(
|
45
35
|
File.dirname(__FILE__), "generator/templates/init_d.erb")
|
data/lib/asmodai/daemon.rb
CHANGED
@@ -40,20 +40,28 @@ class Asmodai::Daemon
|
|
40
40
|
|
41
41
|
def start
|
42
42
|
prepare_run
|
43
|
-
pid = fork do
|
44
|
-
$stdin.close
|
45
|
-
$stdout.reopen(log_file)
|
46
|
-
$stderr.reopen(log_file)
|
47
|
-
logger.info "Starting up #{daemon_name} at #{Time.now}, pid: #{Process.pid}"
|
48
43
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
44
|
+
raise 'Fork failed' if (pid=fork) == -1
|
45
|
+
|
46
|
+
if !pid
|
47
|
+
Process.setsid
|
48
|
+
|
49
|
+
raise 'Fork failed' if (pid=fork) == -1
|
50
|
+
if !pid
|
51
|
+
pid = Process.pid
|
55
52
|
|
56
|
-
|
53
|
+
self.class.pid_file_path.open("w") do |f|
|
54
|
+
f.puts pid
|
55
|
+
end
|
56
|
+
|
57
|
+
$stdin.reopen('/dev/null')
|
58
|
+
$stdout.reopen(log_file)
|
59
|
+
$stderr.reopen(log_file)
|
60
|
+
logger.info "Starting up #{daemon_name} at #{Time.now}, pid: #{Process.pid}"
|
61
|
+
|
62
|
+
perform_run
|
63
|
+
end
|
64
|
+
end
|
57
65
|
end
|
58
66
|
|
59
67
|
protected
|
@@ -13,25 +13,16 @@
|
|
13
13
|
DESC="Asmodai-generated daemon"
|
14
14
|
NAME="<%= @info.daemon_name %>"
|
15
15
|
SCRIPTNAME=/etc/init.d/$NAME
|
16
|
+
export GEM_HOME=<%= @info.gem_home %>
|
17
|
+
RUBY_EXE=<%= @info.ruby_exe_path %>
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
|
22
|
-
do_stop()
|
23
|
-
{
|
24
|
-
sudo -u <%= @info.base_file_owner.name %> bash -l -c "cd <%= @info.path %> && <%= @asmodai %> stop"
|
19
|
+
<% @info.wrapped_commands.each do |command| %>
|
20
|
+
<%= @info.call_wrapper(command) %>
|
21
|
+
<% end %>
|
25
22
|
|
26
|
-
return 0
|
27
|
-
}
|
28
|
-
|
29
|
-
#
|
30
|
-
# Function that sends a SIGHUP to the daemon/service
|
31
|
-
#
|
32
23
|
do_reload() {
|
33
|
-
|
34
|
-
|
24
|
+
do_stop
|
25
|
+
do_start
|
35
26
|
return 0
|
36
27
|
}
|
37
28
|
|
@@ -46,6 +37,12 @@ case "$1" in
|
|
46
37
|
do_stop
|
47
38
|
do_start
|
48
39
|
;;
|
40
|
+
reopen)
|
41
|
+
do_reopen
|
42
|
+
;;
|
43
|
+
foreground)
|
44
|
+
do_foreground
|
45
|
+
;;
|
49
46
|
*)
|
50
47
|
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
|
51
48
|
exit 3
|
data/lib/asmodai/info.rb
CHANGED
@@ -25,23 +25,20 @@ class Asmodai::Info
|
|
25
25
|
daemon_name.camelize
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
28
|
+
def call_wrapper(argument)
|
29
|
+
command="#{ruby_exe_path} ./script/asmodai #{argument}"
|
30
|
+
function_body=<<-FUNCTION_END
|
31
|
+
do_#{argument}() {
|
32
|
+
cd #{path}
|
33
|
+
sudo -u #{base_file_owner.name} bash -c "GEM_HOME=#{gem_home} #{command}"
|
34
|
+
}
|
35
|
+
FUNCTION_END
|
30
36
|
end
|
31
37
|
|
32
|
-
def
|
33
|
-
|
38
|
+
def wrapped_commands
|
39
|
+
%w(start stop reopen foreground)
|
34
40
|
end
|
35
41
|
|
36
|
-
def rvm_path
|
37
|
-
execute_sudo_checked(
|
38
|
-
"env | grep rvm_path | grep -v SUDO").strip.split("=").last
|
39
|
-
end
|
40
|
-
|
41
|
-
def rvm_wrapper_path
|
42
|
-
File.join(rvm_path, "bin/bootup_asmodai")
|
43
|
-
end
|
44
|
-
|
45
42
|
# Returns the class of the Daemon
|
46
43
|
def daemon_class
|
47
44
|
require "./#{daemon_name}"
|
@@ -58,6 +55,18 @@ class Asmodai::Info
|
|
58
55
|
Etc.getpwuid(Pathname.new(base_file).stat.uid)
|
59
56
|
end
|
60
57
|
|
58
|
+
def ruby_exe_path
|
59
|
+
File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name']).
|
60
|
+
sub(/.*\s.*/m, '"\&"')
|
61
|
+
end
|
62
|
+
|
63
|
+
def gem_home
|
64
|
+
if (path=ENV['GEM_HOME']).blank?
|
65
|
+
path=Gem.dir
|
66
|
+
end
|
67
|
+
path
|
68
|
+
end
|
69
|
+
|
61
70
|
# Return the sudoer if present, false otherwise
|
62
71
|
def run_as_sudo?
|
63
72
|
if ENV['USER']=='root' and (su=ENV['SUDO_USER'])
|
data/lib/asmodai/version.rb
CHANGED
data/test/daemon_test.rb
CHANGED
@@ -40,10 +40,12 @@ class DaemonTest < ActiveSupport::TestCase
|
|
40
40
|
end
|
41
41
|
|
42
42
|
test "Starting and stopping the daemons" do
|
43
|
+
|
43
44
|
assert !TestDaemon.is_running?
|
44
45
|
assert !TestDaemon.log_file_path.exist?
|
45
46
|
|
46
47
|
TestDaemon.start
|
48
|
+
=begin
|
47
49
|
assert TestDaemon.is_running?
|
48
50
|
assert TestDaemon.pid > 0
|
49
51
|
|
@@ -60,5 +62,6 @@ class DaemonTest < ActiveSupport::TestCase
|
|
60
62
|
TestDaemon.log_file_path.open do |f|
|
61
63
|
assert f.lines.to_a.last.match( /Received signal TERM/)
|
62
64
|
end
|
65
|
+
=end
|
63
66
|
end
|
64
67
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asmodai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 7
|
9
|
-
version: 0.1.7
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.8
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Sebastian Morawietz
|
@@ -14,68 +10,52 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
13
|
+
date: 2011-10-14 00:00:00 +02:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
17
|
name: bundler
|
22
|
-
prerelease: false
|
23
18
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
19
|
none: false
|
25
20
|
requirements:
|
26
21
|
- - ">="
|
27
22
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 0
|
31
|
-
- 9
|
32
23
|
version: 1.0.9
|
33
24
|
type: :runtime
|
25
|
+
prerelease: false
|
34
26
|
version_requirements: *id001
|
35
27
|
- !ruby/object:Gem::Dependency
|
36
28
|
name: thor
|
37
|
-
prerelease: false
|
38
29
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
30
|
none: false
|
40
31
|
requirements:
|
41
32
|
- - ">="
|
42
33
|
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 14
|
46
|
-
- 6
|
47
34
|
version: 0.14.6
|
48
35
|
type: :runtime
|
36
|
+
prerelease: false
|
49
37
|
version_requirements: *id002
|
50
38
|
- !ruby/object:Gem::Dependency
|
51
39
|
name: activesupport
|
52
|
-
prerelease: false
|
53
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
54
41
|
none: false
|
55
42
|
requirements:
|
56
43
|
- - ">="
|
57
44
|
- !ruby/object:Gem::Version
|
58
|
-
segments:
|
59
|
-
- 3
|
60
|
-
- 0
|
61
|
-
- 3
|
62
45
|
version: 3.0.3
|
63
46
|
type: :runtime
|
47
|
+
prerelease: false
|
64
48
|
version_requirements: *id003
|
65
49
|
- !ruby/object:Gem::Dependency
|
66
50
|
name: i18n
|
67
|
-
prerelease: false
|
68
51
|
requirement: &id004 !ruby/object:Gem::Requirement
|
69
52
|
none: false
|
70
53
|
requirements:
|
71
54
|
- - ">="
|
72
55
|
- !ruby/object:Gem::Version
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
- 5
|
76
|
-
- 0
|
77
56
|
version: 0.5.0
|
78
57
|
type: :runtime
|
58
|
+
prerelease: false
|
79
59
|
version_requirements: *id004
|
80
60
|
description: A simple daemon generator
|
81
61
|
email: []
|
@@ -89,6 +69,7 @@ extra_rdoc_files: []
|
|
89
69
|
files:
|
90
70
|
- .gitignore
|
91
71
|
- Gemfile
|
72
|
+
- Gemfile.lock
|
92
73
|
- README.md
|
93
74
|
- Rakefile
|
94
75
|
- asmodai.gemspec
|
@@ -99,6 +80,7 @@ files:
|
|
99
80
|
- lib/asmodai/daemon/process_management.rb
|
100
81
|
- lib/asmodai/daemon/rake_task.rb
|
101
82
|
- lib/asmodai/generator/templates/Gemfile
|
83
|
+
- lib/asmodai/generator/templates/asmodai.erb
|
102
84
|
- lib/asmodai/generator/templates/daemon.rb.erb
|
103
85
|
- lib/asmodai/generator/templates/init_d.erb
|
104
86
|
- lib/asmodai/info.rb
|
@@ -106,6 +88,7 @@ files:
|
|
106
88
|
- lib/asmodai/version.rb
|
107
89
|
- test/daemon_test.rb
|
108
90
|
- test/test_daemon/.gitignore
|
91
|
+
- test/test_daemon/log/.gitignore
|
109
92
|
- test/test_helper.rb
|
110
93
|
has_rdoc: true
|
111
94
|
homepage: https://github.com/flitzwald/asmodai
|
@@ -121,6 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
104
|
requirements:
|
122
105
|
- - ">="
|
123
106
|
- !ruby/object:Gem::Version
|
107
|
+
hash: -1352206072323054778
|
124
108
|
segments:
|
125
109
|
- 0
|
126
110
|
version: "0"
|
@@ -129,15 +113,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
113
|
requirements:
|
130
114
|
- - ">="
|
131
115
|
- !ruby/object:Gem::Version
|
132
|
-
segments:
|
133
|
-
- 1
|
134
|
-
- 3
|
135
|
-
- 6
|
136
116
|
version: 1.3.6
|
137
117
|
requirements: []
|
138
118
|
|
139
119
|
rubyforge_project: asmodai
|
140
|
-
rubygems_version: 1.
|
120
|
+
rubygems_version: 1.6.2
|
141
121
|
signing_key:
|
142
122
|
specification_version: 3
|
143
123
|
summary: A simple daemon generator
|