mongrel_service 0.4.beta3 → 0.4.0
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/History.txt +11 -0
- data/README.txt +3 -3
- data/lib/mongrel_service/init.rb +27 -27
- data/lib/mongrel_service/service_manager.rb +10 -6
- data/resources/mongrel_service.exe +0 -0
- data/tasks/gem.rake +2 -2
- metadata +61 -35
data/History.txt
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
+
=== 0.4.0 / 2010-11-16
|
2
|
+
|
3
|
+
* Enhancements:
|
4
|
+
* Pass-through arguments during service install. Closes GH-4
|
5
|
+
* A bit more verbose messages at install / removal
|
6
|
+
|
7
|
+
* Bugfixes:
|
8
|
+
* Quote service name. Closes GH-3
|
9
|
+
* Loose mongrel dependency a little bit for compatibility
|
10
|
+
* Service name is mandatory. Closes GH-10
|
11
|
+
|
1
12
|
=== 0.4.beta3 / 2010-03-07
|
2
13
|
|
3
14
|
* Bugfixes:
|
data/README.txt
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= Mongrel Native Win32 Service Plugin
|
2
2
|
|
3
|
-
* http://github.com/
|
3
|
+
* http://github.com/luislavena/mongrel_service
|
4
4
|
|
5
5
|
== DESCRIPTION
|
6
6
|
|
@@ -11,8 +11,8 @@ This replace mongrel_rails_service.
|
|
11
11
|
|
12
12
|
Use the following commands to get more help:
|
13
13
|
|
14
|
-
service::install --help
|
15
|
-
service::remove --help
|
14
|
+
mongrel_rails service::install --help
|
15
|
+
mongrel_rails service::remove --help
|
16
16
|
|
17
17
|
== AUTHOR
|
18
18
|
|
data/lib/mongrel_service/init.rb
CHANGED
@@ -8,7 +8,7 @@ require 'mongrel_service/service_manager'
|
|
8
8
|
module Service
|
9
9
|
class Install < GemPlugin::Plugin "/commands"
|
10
10
|
include Mongrel::Command::Base
|
11
|
-
|
11
|
+
|
12
12
|
def configure
|
13
13
|
options [
|
14
14
|
['-N', '--name SVC_NAME', "Required name for the service to be registered/installed.", :@svc_name, nil],
|
@@ -29,17 +29,23 @@ module Service
|
|
29
29
|
['', '--prefix PATH', "URL prefix for Rails app", :@prefix, nil]
|
30
30
|
]
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
# When we validate the options, we need to make sure the --root is actually RAILS_ROOT
|
34
|
-
# of the rails application we wanted to serve, because later "as service" no error
|
34
|
+
# of the rails application we wanted to serve, because later "as service" no error
|
35
35
|
# show to trace this.
|
36
36
|
def validate
|
37
37
|
@cwd = File.expand_path(@cwd)
|
38
38
|
valid_dir? @cwd, "Invalid path to change to: #@cwd"
|
39
|
-
|
39
|
+
|
40
40
|
# change there to start, then we'll have to come back after daemonize
|
41
41
|
Dir.chdir(@cwd)
|
42
|
-
|
42
|
+
|
43
|
+
valid? @svc_name != nil, "A service name is mandatory."
|
44
|
+
valid? !ServiceManager.exist?(@svc_name), "The service already exist, please remove it first."
|
45
|
+
|
46
|
+
# default service display to service name
|
47
|
+
@svc_display = @svc_name if !@svc_display
|
48
|
+
|
43
49
|
# start with the premise of app really exist.
|
44
50
|
app_exist = true
|
45
51
|
%w{app config log}.each do |path|
|
@@ -59,40 +65,29 @@ module Service
|
|
59
65
|
valid_exists? @mime_map, "MIME mapping file does not exist: #@mime_map" if @mime_map
|
60
66
|
valid_exists? @config_file, "Config file not there: #@config_file" if @config_file
|
61
67
|
|
62
|
-
# We should validate service existance here, right Zed?
|
63
|
-
begin
|
64
|
-
valid? !ServiceManager.exist?(@svc_name), "The service already exist, please remove it first."
|
65
|
-
rescue
|
66
|
-
end
|
67
|
-
|
68
|
-
valid? @svc_name != nil, "A service name is mandatory."
|
69
|
-
|
70
|
-
# default service display to service name
|
71
|
-
@svc_display = @svc_name if !@svc_display
|
72
|
-
|
73
68
|
return @valid
|
74
69
|
end
|
75
|
-
|
70
|
+
|
76
71
|
def run
|
77
72
|
# check if mongrel_service.exe is in ruby bindir.
|
78
73
|
gem_root = File.join(File.dirname(__FILE__), "..", "..")
|
79
74
|
gem_executable = File.join(gem_root, "resources/mongrel_service.exe")
|
80
75
|
bindir_executable = File.join(Config::CONFIG['bindir'], '/mongrel_service.exe')
|
81
|
-
|
76
|
+
|
82
77
|
unless File.exist?(bindir_executable)
|
83
78
|
STDERR.puts "** Copying native mongrel_service executable..."
|
84
79
|
FileUtils.cp gem_executable, bindir_executable rescue nil
|
85
80
|
end
|
86
|
-
|
81
|
+
|
87
82
|
unless FileUtils.compare_file(bindir_executable, gem_executable)
|
88
83
|
STDERR.puts "** Updating native mongrel_service executable..."
|
89
84
|
FileUtils.rm_f bindir_executable rescue nil
|
90
85
|
FileUtils.cp gem_executable, bindir_executable rescue nil
|
91
86
|
end
|
92
|
-
|
87
|
+
|
93
88
|
# build the command line
|
94
89
|
argv = []
|
95
|
-
|
90
|
+
|
96
91
|
# start using the native executable
|
97
92
|
argv << '"' + bindir_executable + '"'
|
98
93
|
|
@@ -101,7 +96,7 @@ module Service
|
|
101
96
|
|
102
97
|
# use the 'single' service for now
|
103
98
|
argv << "single"
|
104
|
-
|
99
|
+
|
105
100
|
# command line setting override config file settings
|
106
101
|
@options = { :host => @address, :port => @port, :cwd => @cwd,
|
107
102
|
:log_file => @log_file, :pid_file => @pid_file, :environment => @environment,
|
@@ -109,15 +104,15 @@ module Service
|
|
109
104
|
:debug => @debug, :includes => ["mongrel"], :config_script => @config_script,
|
110
105
|
:num_procs => @num_procs, :timeout => @timeout, :cpu => @cpu, :prefix => @prefix
|
111
106
|
}
|
112
|
-
|
107
|
+
|
113
108
|
# if we are using a config file, pass -c and -C to the service instead of each start parameter.
|
114
109
|
if @config_file
|
115
110
|
STDERR.puts "** Using #{@config_file} instead of command line parameters."
|
116
111
|
conf = YAML.load_file(@config_file)
|
117
|
-
|
112
|
+
|
118
113
|
# add the root folder (-c)
|
119
114
|
argv << "-c \"#{conf[:cwd]}\""
|
120
|
-
|
115
|
+
|
121
116
|
# use the config file
|
122
117
|
argv << "-C \"#{@config_file}\""
|
123
118
|
|
@@ -140,12 +135,16 @@ module Service
|
|
140
135
|
argv << "--prefix \"#{@options[:prefix]}\"" if @options[:prefix]
|
141
136
|
end
|
142
137
|
|
138
|
+
# concat remaining non-parsed ARGV
|
139
|
+
argv.concat(ARGV)
|
140
|
+
|
143
141
|
begin
|
144
142
|
ServiceManager.create(
|
145
143
|
@svc_name,
|
146
144
|
@svc_display,
|
147
145
|
argv.join(' ')
|
148
146
|
)
|
147
|
+
puts "#{@svc_display} service created."
|
149
148
|
rescue ServiceManager::CreateError => e
|
150
149
|
puts "There was a problem installing the service:"
|
151
150
|
puts e
|
@@ -159,7 +158,7 @@ module Service
|
|
159
158
|
['-N', '--name SVC_NAME', "Required name for the service to be registered/installed.", :@svc_name, nil],
|
160
159
|
]
|
161
160
|
end
|
162
|
-
|
161
|
+
|
163
162
|
def validate
|
164
163
|
valid? @svc_name != nil, "A service name is mandatory."
|
165
164
|
|
@@ -174,7 +173,7 @@ module Service
|
|
174
173
|
return @valid
|
175
174
|
end
|
176
175
|
end
|
177
|
-
|
176
|
+
|
178
177
|
class Remove < GemPlugin::Plugin "/commands"
|
179
178
|
include Mongrel::Command::Base
|
180
179
|
include ServiceValidation
|
@@ -183,6 +182,7 @@ module Service
|
|
183
182
|
display_name = ServiceManager.getdisplayname(@svc_name)
|
184
183
|
|
185
184
|
begin
|
185
|
+
puts "Stopping #{display_name} if running..."
|
186
186
|
ServiceManager.stop(@svc_name)
|
187
187
|
rescue ServiceManager::ServiceError => e
|
188
188
|
end
|
@@ -8,7 +8,7 @@ module ServiceManager
|
|
8
8
|
|
9
9
|
def self.create(service_name, display_name, binary_path_name)
|
10
10
|
cmd = ['create']
|
11
|
-
cmd << service_name
|
11
|
+
cmd << quote(service_name)
|
12
12
|
cmd << "DisplayName=" << display_name.inspect
|
13
13
|
cmd << "binPath=" << binary_path_name.inspect
|
14
14
|
status, out = sc(*cmd)
|
@@ -18,12 +18,12 @@ module ServiceManager
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.exist?(service_name)
|
21
|
-
status, out = sc('query', service_name)
|
21
|
+
status, out = sc('query', quote(service_name))
|
22
22
|
out =~ /#{service_name}/i
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.open(service_name)
|
26
|
-
status, out = sc('qc', service_name, 4096)
|
26
|
+
status, out = sc('qc', quote(service_name), 4096)
|
27
27
|
raise ServiceNotFound.new(out) unless status == 0
|
28
28
|
|
29
29
|
out =~ /BINARY\_PATH\_NAME.*\: (.*)$/
|
@@ -39,7 +39,7 @@ module ServiceManager
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.getdisplayname(service_name)
|
42
|
-
status, out = sc('GetDisplayName', service_name)
|
42
|
+
status, out = sc('GetDisplayName', quote(service_name))
|
43
43
|
raise ServiceNotFound.new(out) unless status == 0
|
44
44
|
|
45
45
|
out =~ /\=(.*)$/
|
@@ -47,14 +47,14 @@ module ServiceManager
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.stop(service_name)
|
50
|
-
status, out = net('stop', service_name)
|
50
|
+
status, out = net('stop', quote(service_name))
|
51
51
|
raise ServiceError.new(out) unless status == 0
|
52
52
|
|
53
53
|
return true
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.delete(service_name)
|
57
|
-
status, out = sc('delete', service_name)
|
57
|
+
status, out = sc('delete', quote(service_name))
|
58
58
|
raise ServiceError.new(out) unless status == 0
|
59
59
|
|
60
60
|
return true
|
@@ -71,4 +71,8 @@ module ServiceManager
|
|
71
71
|
output = `net #{args.join(' ')} 2>&1`
|
72
72
|
return [$?.exitstatus, output]
|
73
73
|
end
|
74
|
+
|
75
|
+
def self.quote(text)
|
76
|
+
text.inspect
|
77
|
+
end
|
74
78
|
end
|
Binary file
|
data/tasks/gem.rake
CHANGED
@@ -6,12 +6,12 @@ task :gem => [:compile]
|
|
6
6
|
|
7
7
|
HOE = Hoe.spec 'mongrel_service' do
|
8
8
|
self.rubyforge_name = "mongrel"
|
9
|
-
self.version = '0.4.
|
9
|
+
self.version = '0.4.0'
|
10
10
|
|
11
11
|
developer 'Luis Lavena', 'luislavena@gmail.com'
|
12
12
|
|
13
13
|
extra_deps << ['gem_plugin', '~> 0.2.3']
|
14
|
-
extra_deps << ['mongrel', '
|
14
|
+
extra_deps << ['mongrel', '>= 1.1.5']
|
15
15
|
|
16
16
|
self.need_tar = false
|
17
17
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongrel_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Luis Lavena
|
@@ -9,59 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-11-16 00:00:00 -03:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: gem_plugin
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ~>
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 17
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 2
|
33
|
+
- 3
|
23
34
|
version: 0.2.3
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: mongrel
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
|
-
- -
|
43
|
+
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 25
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 1
|
49
|
+
- 5
|
33
50
|
version: 1.1.5
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
- !ruby/object:Gem::Dependency
|
36
54
|
name: rubyforge
|
37
|
-
|
38
|
-
|
39
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
40
58
|
requirements:
|
41
59
|
- - ">="
|
42
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 7
|
62
|
+
segments:
|
63
|
+
- 2
|
64
|
+
- 0
|
65
|
+
- 4
|
43
66
|
version: 2.0.4
|
44
|
-
version:
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: gemcutter
|
47
67
|
type: :development
|
48
|
-
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.4.1
|
54
|
-
version:
|
68
|
+
version_requirements: *id003
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: hoe
|
57
|
-
|
58
|
-
|
59
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
60
74
|
requirements:
|
61
75
|
- - ">="
|
62
76
|
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
|
77
|
+
hash: 19
|
78
|
+
segments:
|
79
|
+
- 2
|
80
|
+
- 6
|
81
|
+
- 2
|
82
|
+
version: 2.6.2
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
65
85
|
description: |-
|
66
86
|
This plugin offer native win32 services for rails.
|
67
87
|
This replace mongrel_rails_service.
|
@@ -111,7 +131,7 @@ files:
|
|
111
131
|
- TODO.txt
|
112
132
|
- tools/freebasic.rb
|
113
133
|
has_rdoc: true
|
114
|
-
homepage: http://github.com/
|
134
|
+
homepage: http://github.com/luislavena/mongrel_service
|
115
135
|
licenses: []
|
116
136
|
|
117
137
|
post_install_message:
|
@@ -121,21 +141,27 @@ rdoc_options:
|
|
121
141
|
require_paths:
|
122
142
|
- lib
|
123
143
|
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
124
145
|
requirements:
|
125
146
|
- - ">="
|
126
147
|
- !ruby/object:Gem::Version
|
148
|
+
hash: 3
|
149
|
+
segments:
|
150
|
+
- 0
|
127
151
|
version: "0"
|
128
|
-
version:
|
129
152
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
130
154
|
requirements:
|
131
|
-
- - "
|
155
|
+
- - ">="
|
132
156
|
- !ruby/object:Gem::Version
|
133
|
-
|
134
|
-
|
157
|
+
hash: 3
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
version: "0"
|
135
161
|
requirements: []
|
136
162
|
|
137
163
|
rubyforge_project: mongrel
|
138
|
-
rubygems_version: 1.3.
|
164
|
+
rubygems_version: 1.3.7
|
139
165
|
signing_key:
|
140
166
|
specification_version: 3
|
141
167
|
summary: This plugin offer native win32 services for rails
|