Skip to content
Gem allows you to use our RubyOnRails project like XMLRPC server
Latest commit dc44677 Apr 22, 2013 @alexkv Merge pull request #3 from RushOnline/fix-readme
bugfix: "Uncaught exception: unexpected return in method ..."



Rails has native support for xmlrpc. Most people are familiar with the 'xmlrpc/client' library. The 'xmlrpc/server' library examples mostly make an assumption that you will run a standalone server.

rails-xmlrpc allows you to instead expose normal Rails controller methods via XMLRPC, tied to an xmlrpc endpoint route in your app.


Run in terminal:

gem install rails-xmlrpc

For Rails 2

Add row to environment.rb inside Rails::Initializer block:

config.gem "rails-xmlrpc"

Add row to routes.rb

map.connect 'api/xmlrpc', :controller => 'my_controller', :action => 'xe_index'

For Rails 3

Add row to Gemfile:

gem "rails-xmlrpc"

Set up a route in your routes.rb file

match 'api/xmlrpc' => 'my#xe_index'


Add this code to your controller:

class MyController < ApplicationController

  add_method 'Container.method_name' do
    'Hello World'


Then, pointing an XMLRPC client at the defined route, your normal controller actions will handle the requests.

require 'xmlrpc/client'
server = XMLRPC::Client.new2("http://localhost:3000/api/xmlrpc")"Container.method_name")

To use a custom namespace prefix on all exposed methods (for example, if using someone else's specified protocol like MetaWeblog), declare a method_prefix:

class MyApiController < ApplicationController
  exposes_xmlrpc_methods :method_prefix => "metaWeblog."

  # This method will be exposed externally as "metaWeblog.newPost()"
  def newPost(blogid, username, password, struct, publish)

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.


Copyright © 2011 Aleksei Kvitinskii, released under the MIT license.

Something went wrong with that request. Please try again.