rack-handler-apache 0.0.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.
@@ -0,0 +1 @@
1
+ require "rack/handler/apache"
@@ -0,0 +1,135 @@
1
+ require "phusion_passenger"
2
+
3
+ module Rack
4
+ module Handler
5
+ class Apache
6
+
7
+ def self.valid_options
8
+ {
9
+ "Port=PORT" => "Port to listen on (default: 8080)",
10
+ #TODO#"Host=HOST" => "Hostname to listen on (default: localhost)",
11
+ }
12
+ end
13
+
14
+ def self.run(app, options={})
15
+
16
+ unless ::File.exists? ::PhusionPassenger::APACHE2_MODULE
17
+ puts "Passenger apache module missing, did you run passenger-install-apache2-module?"
18
+ exit
19
+ end
20
+
21
+ @root = ::Dir.pwd
22
+ @port = options[:Port] || 8080
23
+ @pid_file = "#{@root}/tmp/rack-helper-apache.pid"
24
+ @conf_file = "#{@root}/tmp/httpd.conf"
25
+ @passenger = `bundle exec passenger-install-apache2-module --snippet`
26
+
27
+ puts "Warning: Please use SSLCertificateFile, not SSLCertificate" if
28
+ options[:SSLCertificate] && !options[:SSLCertificateFile]
29
+
30
+ puts "Warning: Please use SSLPrivateKeyFile, not SSLPrivateKey" if
31
+ options[:SSLPrivateKey] && !options[:SSLPrivateKeyFile]
32
+
33
+ config = <<-EOD.gsub(/^ {10}/, '')
34
+ #{@passenger}
35
+ User #{Etc.getlogin}
36
+ Listen #{@port}
37
+ PidFile #{@pid_file}
38
+ ErrorLog #{@root}/log/rack-helper-apache_error.log
39
+ LockFile #{@root}/tmp/rack-helper-apache.lock
40
+ ServerName localhost
41
+ <VirtualHost *:#{@port}>
42
+ ServerName localhost
43
+ #{options[:SSLEnable] ? "SSLEngine on" : ""}
44
+ DocumentRoot #{@root}/public
45
+ <Directory #{@root}/public>
46
+ AllowOverride all
47
+ Options -MultiViews
48
+ </Directory>
49
+ </VirtualHost>
50
+ EOD
51
+
52
+ if options[:SSLEnable]
53
+ config = <<-EOD.gsub(/^ {12}/, '')+config
54
+ LoadModule ssl_module libexec/apache2/mod_ssl.so
55
+ SSLCertificateFile #{options[:SSLCertificateFile]}
56
+ SSLCertificateKeyFile #{options[:SSLPrivateKeyFile]}
57
+ SSLSessionCache none
58
+ EOD
59
+ end
60
+
61
+
62
+
63
+ kill_httpd()
64
+ ::File.open(@conf_file, 'w') { |f| f.write(config) }
65
+ system(apache_bin,'-f',@conf_file)
66
+
67
+ print "Waiting for apache to start..."
68
+ 10.times { break if is_running?; sleep 0.5; print "."; STDOUT.flush }
69
+
70
+ if is_running?
71
+ puts "...started [pid:#{get_pid}]"
72
+ sleep 0.5 while is_running?
73
+ puts "Apache terminated."
74
+ else
75
+ puts "...never started!"
76
+ exit
77
+ end
78
+
79
+ end
80
+
81
+
82
+ def self.shutdown()
83
+ kill_httpd()
84
+ end
85
+
86
+ private
87
+
88
+
89
+ # Locate apache - since sbin is often not in the path,
90
+ # we check there too - with a strong OS-X bias
91
+ def self.apache_bin()
92
+ [ 'apache2', 'httpd' ].each do |b|
93
+ ENV['PATH'].split(':')+[
94
+ '/opt/local/sbin',
95
+ '/sw/sbin',
96
+ '/usr/local/sbin',
97
+ '/usr/sbin'
98
+ ].each do |d|
99
+ d_b = ::File.join(d,b)
100
+ return d_b if ::File.executable? d_b
101
+ end
102
+ end
103
+ return false;
104
+ end
105
+
106
+
107
+ def self.get_pid
108
+ if ::File.exists? @pid_file
109
+ ::File.read(@pid_file).to_i
110
+ end
111
+ end
112
+
113
+ def self.is_running?
114
+ if pid=get_pid
115
+ begin
116
+ ::Process.kill 0, pid
117
+ return true
118
+ rescue Errno::ESRCH => e
119
+ end
120
+ end
121
+ return false
122
+ end
123
+
124
+ def self.kill_httpd()
125
+ if pid = get_pid
126
+ puts "Killing apache [pid:#{pid}]..."
127
+ ::Process.kill "TERM", pid
128
+ ::File.unlink @pid_file
129
+ sleep 1
130
+ end
131
+ end
132
+
133
+ end
134
+ end
135
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rack-handler-apache
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Gavin Brock
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2010-04-28 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: A rack-handler like gem for apache/passenger
15
+ email: gavin@brock-family.org
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/rack/handler/apache.rb
21
+ - lib/rack-handler-apache.rb
22
+ homepage: https://github.com/brockgr/rack-handler-apache
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.23
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: Rack::Handle::Apache
46
+ test_files: []