[#12073] Re: Ruby is much slower on linux when compiled with --enable-pthread? — "M. Edward (Ed) Borasky" <znmeb@...>

-----BEGIN PGP SIGNED MESSAGE-----

9 messages 2007/09/04

[#12085] New array methods cycle, choice, shuffle (plus bug in cycle) — David Flanagan <david@...>

Four new methods have been added to Array the Ruby 1.9 trunk. I've got

81 messages 2007/09/06
[#18036] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Charles Oliver Nutter <charles.nutter@...> 2008/07/31

Restarting this thread because I missed it the first time around and

[#18037] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Yukihiro Matsumoto <matz@...> 2008/07/31

Hi,

[#18038] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Gregory Brown" <gregory.t.brown@...> 2008/08/01

On Thu, Jul 31, 2008 at 7:50 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#18046] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Michael Neumann <mneumann@...> 2008/08/01

Gregory Brown wrote:

[#18048] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Charles Oliver Nutter <charles.nutter@...> 2008/08/01

Michael Neumann wrote:

[#18051] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "David A. Black" <dblack@...> 2008/08/01

Hi --

[#18053] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Wilson Bilkovich" <wilsonb@...> 2008/08/01

On 8/1/08, David A. Black <dblack@rubypal.com> wrote:

[#18074] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — David Flanagan <david@...> 2008/08/01

Wilson Bilkovich wrote:

[#18080] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Yukihiro Matsumoto <matz@...> 2008/08/02

Hi,

[#18097] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — "Pit Capitain" <pit.capitain@...> 2008/08/03

2008/8/2 Yukihiro Matsumoto <matz@ruby-lang.org>:

[#18040] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Jim Weirich <jim.weirich@...> 2008/08/01

On Jul 31, 2008, at 7:33 PM, Charles Oliver Nutter wrote:

[#18056] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Thomas Enebo <Thomas.Enebo@...> 2008/08/01

Jim Weirich wrote:

[#18059] Re: New array methods cycle, choice, shuffle (plus bug in cycle) — Jim Weirich <jim.weirich@...> 2008/08/01

On Aug 1, 2008, at 1:53 PM, Thomas Enebo wrote:

[#12096] Next 1.8.6 on Sept. 22 — Urabe Shyouhei <shyouhei@...>

Hi all.

28 messages 2007/09/09

[#12201] how about actors implemented in ruby-core itself — hemant <gethemant@...>

Hi,

12 messages 2007/09/20

[#12248] arbitrary Unicode characters in identifiers? — David Flanagan <david@...>

12 messages 2007/09/26

[#12284] gc.c -- possible logic error? — Hugh Sasse <hgs@...>

I've been looking at Tom Copeland's memory allocation problem:

36 messages 2007/09/28
[#12329] Re: gc.c -- possible logic error? — Tanaka Akira <akr@...> 2007/10/01

In article <Pine.GSO.4.64.0709281302390.26570@brains.eng.cse.dmu.ac.uk>,

[#12305] Will 1.8.6 remain compiled with VC6? — "Luis Lavena" <luislavena@...>

Hello Core developers.

29 messages 2007/09/30
[#12306] Re: Will 1.8.6 remain compiled with VC6? — "Austin Ziegler" <halostatue@...> 2007/09/30

On 9/30/07, Luis Lavena <luislavena@gmail.com> wrote:

[PATCH] Improving XML-RPC ModRuby support

From: Chris Wailes <cwailes2@...>
Date: 2007-09-14 16:34:59 UTC
List: ruby-core #12173
Attached are two patches.  The first one changes the way that ModRuby is supported.  Instead of loading the server and responding to a request every time a request is made a persistent object is generated that can be used by ModRuby as a RubyHandler.  This should improve performance.

The second patch changes the XMLRPC::Server::dispatch method so that it passes the 'methodname' to the service_hook object.  This should allow more functionality inside the service hook, such as conditional logging or access control to functions.

Chris Wailes

P.S. This is my third attempt to submit this patch with no comments... hopefully it will get noticed this time.

Attachments (2)

xmlrpc-modruby.patch (3.52 KB, text/x-diff)
Index: lib/xmlrpc/server.rb
===================================================================
--- lib/xmlrpc/server.rb	(revision 13445)
+++ lib/xmlrpc/server.rb	(working copy)
@@ -498,44 +498,91 @@
 
 =begin
 = XMLRPC::ModRubyServer
-== Description
-Implements a XML-RPC server, which works with Apache mod_ruby.
+== Synopsis
+ruby_file.rb:
+  def make_server
+    server = XMLRPC::ModRubyServer.new()
 
-Use it in the same way as CGIServer!
+    server.add_handler("michael.add") do |a,b|
+      a + b
+    end
 
+    server.add_handler("michael.div") do |a,b|
+      if b == 0
+        raise XMLRPC::FaultException.new(1, "division by zero")
+      else
+        a / b
+      end
+    end
+
+    server.set_default_handler do |name, *args|
+      raise XMLRPC::FaultException.new(-99, "Method #{name} missing" + " or wrong number of parameters!")
+    end
+
+    return server
+  end
+
+ruby.conf:
+#This is your mod_ruby configuration file.
+  LoadModule ruby_module modules/mod_ruby.so
+
+  DirectoryIndex index.rb
+
+  AddType text/html.rb
+  <IfModule mod_ruby.c>
+    RubyRequire apache/ruby-run
+
+    #If your file is at /path/to/your/ruby_file.rb
+    RubyAddPath /path/to/your
+    RubyRequire ruby_file
+
+    # Exec *.rb as ruby scripts.
+    <Files *.rb>
+      SetHandler ruby-object
+      RubyHandler Apache::RubyRun.instance
+      Options +ExecCGI
+    </Files>
+  </IfModule>
+
+  #This location doesn't actually corispond to any file so you can make it any path you want.
+  #This example makes the server address http://example.com/xmlrpcserver
+  <Location /xmlrpcserver>
+    SetHandler ruby-object
+    RubyHandler make_server
+
+    Order allow,deny
+    Allow from all
+  </Location>
+
+== Description
+Implements a XML-RPC server, which works with Apache mod_ruby.  By providing the 'handler' method a ModRubyServer object
+can be used as a RubyHandler by mod_ruby.  This prevents the server from being instantiated every time a request is made.
 == Superclass
 ((<XMLRPC::BasicServer>))
-=end 
+=end
 
 class ModRubyServer < BasicServer
+  def handler(apache_request)
+    @ap = apache_request
 
-  def initialize(*a)
-    @ap = Apache::request
-    super(*a)
-  end
+    header = Hash.new
+    @ap.headers_in.each {|key, value| header[key.capitalize] = value}
 
-  def serve
-    catch(:exit_serve) {
-      header = {}
-      @ap.headers_in.each {|key, value| header[key.capitalize] = value}
+    length = header['Content-length'].to_i
 
-      length = header['Content-length'].to_i
+    http_error(405, "Method Not Allowed") unless @ap.request_method  == "POST"
+    http_error(400, "Bad Request")        unless parse_content_type(header['Content-type']).first == "text/xml"
+    http_error(411, "Length Required")    unless length > 0
 
-      http_error(405, "Method Not Allowed") unless @ap.request_method  == "POST" 
-      http_error(400, "Bad Request")        unless parse_content_type(header['Content-type']).first == "text/xml"
-      http_error(411, "Length Required")    unless length > 0 
+    @ap.binmode
+    data = apache_request.read(length)
 
-      # TODO: do we need a call to binmode?
-      @ap.binmode
-      data = @ap.read(length)
+    http_error(400, "Bad Requiest") if data.nil? or data.size != length
 
-      http_error(400, "Bad Request")        if data.nil? or data.size != length
+    http_write(process(data), 200, "Content-type" => "text/xml; charset=utf-8")
 
-      http_write(process(data), 200, "Content-type" => "text/xml; charset=utf-8")
-    }
+    return Apache::OK
   end
-
-
   private
 
   def http_error(status, message)
xmlrpc-dispatch.patch (932 Bytes, text/x-diff)
Index: lib/xmlrpc/server.rb
===================================================================
--- lib/xmlrpc/server.rb	(revision 13445)
+++ lib/xmlrpc/server.rb	(working copy)
@@ -129,9 +129,9 @@
     The service-hook is called with a (({Proc})) object and with the parameters for this (({Proc})).
     An example:
 
-       server.set_service_hook {|obj, *args|
+       server.set_service_hook {|methodname, method_obj, *args|
          begin
-           ret = obj.call(*args)  # call the original service-method
+           ret = method_obj.call(*args)  # call the original service-method
            # could convert the return value 
          resuce
            # rescue exceptions
@@ -333,7 +333,7 @@
         if @service_hook.nil?
           return obj.call(*args) 
         else
-          return @service_hook.call(obj, *args)
+          return @service_hook.call(methodname, obj, *args)
         end
       end
     end 

In This Thread

Prev Next