aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/generators/rails/app/templates/dispatchers
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/generators/rails/app/templates/dispatchers')
-rw-r--r--railties/lib/generators/rails/app/templates/dispatchers/config.ru7
-rwxr-xr-xrailties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi24
-rwxr-xr-xrailties/lib/generators/rails/app/templates/dispatchers/dispatch.rb10
-rwxr-xr-xrailties/lib/generators/rails/app/templates/dispatchers/gateway.cgi97
4 files changed, 138 insertions, 0 deletions
diff --git a/railties/lib/generators/rails/app/templates/dispatchers/config.ru b/railties/lib/generators/rails/app/templates/dispatchers/config.ru
new file mode 100644
index 0000000000..acbfe4e9ae
--- /dev/null
+++ b/railties/lib/generators/rails/app/templates/dispatchers/config.ru
@@ -0,0 +1,7 @@
+# Rack Dispatcher
+
+# Require your environment file to bootstrap Rails
+require File.dirname(__FILE__) + '/config/environment'
+
+# Dispatch the request
+run ActionController::Dispatcher.new
diff --git a/railties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi
new file mode 100755
index 0000000000..f5b3b71875
--- /dev/null
+++ b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi
@@ -0,0 +1,24 @@
+<%= shebang %>
+#
+# You may specify the path to the FastCGI crash log (a log of unhandled
+# exceptions which forced the FastCGI instance to exit, great for debugging)
+# and the number of requests to process before running garbage collection.
+#
+# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
+# and the GC period is nil (turned off). A reasonable number of requests
+# could range from 10-100 depending on the memory footprint of your app.
+#
+# Example:
+# # Default log path, normal GC behavior.
+# RailsFCGIHandler.process!
+#
+# # Default log path, 50 requests between GC.
+# RailsFCGIHandler.process! nil, 50
+#
+# # Custom log path, normal GC behavior.
+# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
+#
+require File.dirname(__FILE__) + "/../config/environment"
+require 'fcgi_handler'
+
+RailsFCGIHandler.process!
diff --git a/railties/lib/generators/rails/app/templates/dispatchers/dispatch.rb b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.rb
new file mode 100755
index 0000000000..48e888113a
--- /dev/null
+++ b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.rb
@@ -0,0 +1,10 @@
+<%= shebang %>
+
+require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
+
+# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
+# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
+require "dispatcher"
+
+ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
+Dispatcher.dispatch
diff --git a/railties/lib/generators/rails/app/templates/dispatchers/gateway.cgi b/railties/lib/generators/rails/app/templates/dispatchers/gateway.cgi
new file mode 100755
index 0000000000..bdc1055a22
--- /dev/null
+++ b/railties/lib/generators/rails/app/templates/dispatchers/gateway.cgi
@@ -0,0 +1,97 @@
+<%= shebang %>
+
+require 'drb'
+
+# This file includes an experimental gateway CGI implementation. It will work
+# only on platforms which support both fork and sockets.
+#
+# To enable it edit public/.htaccess and replace dispatch.cgi with gateway.cgi.
+#
+# Next, create the directory log/drb_gateway and grant the apache user rw access
+# to said directory.
+#
+# On the next request to your server, the gateway tracker should start up, along
+# with a few listener processes. This setup should provide you with much better
+# speeds than dispatch.cgi.
+#
+# Keep in mind that the first request made to the server will be slow, as the
+# tracker and listeners will have to load. Also, the tracker and listeners will
+# shutdown after a period if inactivity. You can set this value below -- the
+# default is 90 seconds.
+
+TrackerSocket = File.expand_path(File.join(File.dirname(__FILE__), '../log/drb_gateway/tracker.sock'))
+DieAfter = 90 # Seconds
+Listeners = 3
+
+def message(s)
+ $stderr.puts "gateway.cgi: #{s}" if ENV && ENV["DEBUG_GATEWAY"]
+end
+
+def listener_socket(number)
+ File.expand_path(File.join(File.dirname(__FILE__), "../log/drb_gateway/listener_#{number}.sock"))
+end
+
+unless File.exist? TrackerSocket
+ message "Starting tracker and #{Listeners} listeners"
+ fork do
+ Process.setsid
+ STDIN.reopen "/dev/null"
+ STDOUT.reopen "/dev/null", "a"
+
+ root = File.expand_path(File.dirname(__FILE__) + '/..')
+
+ message "starting tracker"
+ fork do
+ ARGV.clear
+ ARGV << TrackerSocket << Listeners.to_s << DieAfter.to_s
+ load File.join(root, 'script', 'tracker')
+ end
+
+ message "starting listeners"
+ require File.join(root, 'config/environment.rb')
+ Listeners.times do |number|
+ fork do
+ ARGV.clear
+ ARGV << listener_socket(number) << DieAfter.to_s
+ load File.join(root, 'script', 'listener')
+ end
+ end
+ end
+
+ message "waiting for tracker and listener to arise..."
+ ready = false
+ 10.times do
+ sleep 0.5
+ break if (ready = File.exist?(TrackerSocket) && File.exist?(listener_socket(0)))
+ end
+
+ if ready
+ message "tracker and listener are ready"
+ else
+ message "Waited 5 seconds, listener and tracker not ready... dropping request"
+ Kernel.exit 1
+ end
+end
+
+DRb.start_service
+
+message "connecting to tracker"
+tracker = DRbObject.new_with_uri("drbunix:#{TrackerSocket}")
+
+input = $stdin.read
+$stdin.close
+
+env = ENV.inspect
+
+output = nil
+tracker.with_listener do |number|
+ message "connecting to listener #{number}"
+ socket = listener_socket(number)
+ listener = DRbObject.new_with_uri("drbunix:#{socket}")
+ output = listener.process(env, input)
+ message "listener #{number} has finished, writing output"
+end
+
+$stdout.write output
+$stdout.flush
+$stdout.close