instaweb: support for Ruby's WEBrick server
running the webrick server with git requires Ruby and Ruby's YAML and Webrick libraries (both of which come standard with Ruby). nice for single-user standalone invocations. the --httpd=webrick option generates a ruby script on the fly to read httpd.conf options and invoke the web server via library call. this script is placed in the .git/gitweb directory. it also generates a shell script in a feeble attempt to invoke ruby in a portable manner, which assumes that 'ruby' is in the user's $PATH. Signed-off-by: Mike Dalessio <mike@csa.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>maint
parent
14b45b66e7
commit
425b78e886
|
@ -27,7 +27,7 @@ OPTIONS
|
||||||
The HTTP daemon command-line that will be executed.
|
The HTTP daemon command-line that will be executed.
|
||||||
Command-line options may be specified here, and the
|
Command-line options may be specified here, and the
|
||||||
configuration file will be added at the end of the command-line.
|
configuration file will be added at the end of the command-line.
|
||||||
Currently, lighttpd and apache2 are the only supported servers.
|
Currently lighttpd, apache2 and webrick are supported.
|
||||||
(Default: lighttpd)
|
(Default: lighttpd)
|
||||||
|
|
||||||
-m|--module-path::
|
-m|--module-path::
|
||||||
|
|
|
@ -139,6 +139,43 @@ GIT_DIR="$fqgitdir"
|
||||||
export GIT_EXEC_PATH GIT_DIR
|
export GIT_EXEC_PATH GIT_DIR
|
||||||
|
|
||||||
|
|
||||||
|
webrick_conf () {
|
||||||
|
# generate a standalone server script in $fqgitdir/gitweb.
|
||||||
|
cat >"$fqgitdir/gitweb/$httpd.rb" <<EOF
|
||||||
|
require 'webrick'
|
||||||
|
require 'yaml'
|
||||||
|
options = YAML::load_file(ARGV[0])
|
||||||
|
options[:StartCallback] = proc do
|
||||||
|
File.open(options[:PidFile],"w") do |f|
|
||||||
|
f.puts Process.pid
|
||||||
|
end
|
||||||
|
end
|
||||||
|
options[:ServerType] = WEBrick::Daemon
|
||||||
|
server = WEBrick::HTTPServer.new(options)
|
||||||
|
['INT', 'TERM'].each do |signal|
|
||||||
|
trap(signal) {server.shutdown}
|
||||||
|
end
|
||||||
|
server.start
|
||||||
|
EOF
|
||||||
|
# generate a shell script to invoke the above ruby script,
|
||||||
|
# which assumes _ruby_ is in the user's $PATH. that's _one_
|
||||||
|
# portable way to run ruby, which could be installed anywhere,
|
||||||
|
# really.
|
||||||
|
cat >"$fqgitdir/gitweb/$httpd" <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
exec ruby "$fqgitdir/gitweb/$httpd.rb" \$*
|
||||||
|
EOF
|
||||||
|
chmod +x "$fqgitdir/gitweb/$httpd"
|
||||||
|
|
||||||
|
cat >"$conf" <<EOF
|
||||||
|
:Port: $port
|
||||||
|
:DocumentRoot: "$fqgitdir/gitweb"
|
||||||
|
:DirectoryIndex: ["gitweb.cgi"]
|
||||||
|
:PidFile: "$fqgitdir/pid"
|
||||||
|
EOF
|
||||||
|
test "$local" = true && echo ':BindAddress: "127.0.0.1"' >> "$conf"
|
||||||
|
}
|
||||||
|
|
||||||
lighttpd_conf () {
|
lighttpd_conf () {
|
||||||
cat > "$conf" <<EOF
|
cat > "$conf" <<EOF
|
||||||
server.document-root = "$fqgitdir/gitweb"
|
server.document-root = "$fqgitdir/gitweb"
|
||||||
|
@ -239,6 +276,9 @@ case "$httpd" in
|
||||||
*apache2*)
|
*apache2*)
|
||||||
apache2_conf
|
apache2_conf
|
||||||
;;
|
;;
|
||||||
|
webrick)
|
||||||
|
webrick_conf
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown httpd specified: $httpd"
|
echo "Unknown httpd specified: $httpd"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
Loading…
Reference in New Issue