about summary refs log tree commit homepage
path: root/examples
diff options
context:
space:
mode:
authorzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-02-08 12:48:41 +0000
committerzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-02-08 12:48:41 +0000
commit98a33bb30438c2bcbb10d48523afd9d491750a1e (patch)
treec9d06e668e43720cab061ce4a45fa302d357efe8 /examples
parent788e4f4902992a9de25f995729b7de713003bcc2 (diff)
downloadunicorn-98a33bb30438c2bcbb10d48523afd9d491750a1e.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@21 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'examples')
-rw-r--r--examples/mongrel_rails.rb73
-rw-r--r--examples/simpletest.rb22
2 files changed, 89 insertions, 6 deletions
diff --git a/examples/mongrel_rails.rb b/examples/mongrel_rails.rb
new file mode 100644
index 0000000..ab5b740
--- /dev/null
+++ b/examples/mongrel_rails.rb
@@ -0,0 +1,73 @@
+require 'mongrel'
+require 'cgi'
+require 'config/environment'
+
+class CGIFixed < ::CGI
+  public :env_table
+  
+  def initialize(params, data, out, *args)
+    @env_table = params
+    @args = *args
+    @input = StringIO.new(data)
+    @out = out
+    super(*args)
+  end
+  
+  def args
+    @args
+  end
+  
+  def env_table
+    @env_table
+  end
+  
+  def stdinput
+    @input
+  end
+  
+  def stdoutput
+    @out
+  end
+end
+
+
+class RailsHandler < Mongrel::HttpHandler
+  def initialize
+    @guard = Mutex.new
+  end
+  
+  def process(request, response)
+    # not static, need to talk to rails
+    return if response.socket.closed?
+    
+    cgi = CGIFixed.new(request.params, request.body, response.socket)
+    begin
+
+      @guard.synchronize do
+        # Rails is not thread safe so must be run entirely within synchronize
+        Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, response.body)
+      end
+
+      response.send_status
+      response.send_body
+    rescue IOError
+      @log.error("received IOError #$! when handling client.  Your web server doesn't like me.")
+    rescue Object => rails_error
+      @log.error("calling Dispatcher.dispatch", rails_error)
+    end
+  end
+end
+
+if ARGV.length != 3
+  STDERR.puts "usage:  mongrel_rails.rb <host> <port> <docroot>"
+  exit(1)
+end
+
+h = Mongrel::HttpServer.new(ARGV[0], ARGV[1])
+h.register("/", Mongrel::DirHandler.new(ARGV[2]))
+h.register("/app", RailsHandler.new)
+h.run
+
+puts "Mongrel running on #{ARGV[0]}:#{ARGV[1]} with docroot #{ARGV[2]}"
+
+h.acceptor.join
diff --git a/examples/simpletest.rb b/examples/simpletest.rb
index 532e289..893df96 100644
--- a/examples/simpletest.rb
+++ b/examples/simpletest.rb
@@ -4,14 +4,24 @@ require 'yaml'
 class SimpleHandler < Mongrel::HttpHandler
     def process(request, response)
       response.start do |head,out|
-        head["Content-Type"] = "text/plain"
-        out.write("hello!\n")
+        head["Content-Type"] = "text/html"
+        out << "<html><body>Your request:<br />"
+        out << "<pre>#{request.params.to_yaml}</pre>"
+        out << "<a href=\"/files\">View the files.</a></body></html>"
       end
     end
 end
 
-h = Mongrel::HttpServer.new("0.0.0.0", "3000")
-h.register("/test", SimpleHandler.new)
-h.register("/files", Mongrel::DirHandler.new("."))
-h.run.join
+if ARGV.length != 3
+  STDERR.puts "usage:  simpletest.rb <host> <port> <docroot>"
+  exit(1)
+end
+
+h = Mongrel::HttpServer.new(ARGV[0], ARGV[1])
+h.register("/", SimpleHandler.new)
+h.register("/files", Mongrel::DirHandler.new(ARGV[2]))
+h.run
+
+puts "Mongrel running on #{ARGV[0]}:#{ARGV[1]} with docroot #{ARGV[2]}"
 
+h.acceptor.join