[#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] XMLRPC::ModRubyServer

From: Chris Wailes <cwailes2@...>
Date: 2007-09-06 22:48:48 UTC
List: ruby-core #12087
Made some changes to the XMLRPC::ModRubyServer class that allows it to be loaded as a RubyHandler by ModRuby and prevent it from being reloaded every time a request is made.  This can greatly improve performance when the server takes a while to load, such as when it is establishing database connections or loading lots of libraries.

As well, I modified the way that the `XMLRPC::Server.dispatch` method calls the  service_hook Proc object so that it also passes the name of the XML-RPC method that is called along with the Proc object associated with the name, and the arguments for the method.

Sincerely,
Chris Wailes

Attachments (1)

ruby-changes.patch (4.16 KB, text/x-diff)
Index: lib/xmlrpc/server.rb
===================================================================
--- lib/xmlrpc/server.rb	(revision 12809)
+++ 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 {|method_name, 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 
@@ -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")
-    }
-  end
-
-
+		return Apache::OK
+	end
   private
 
   def http_error(status, message)

In This Thread

Prev Next