Betfair soap problem

Hi. I'm trying to use the Betfair API with Ruby:-
http://bdp.betfair.com/exchdevelopers.php

Basically, I can login to the service but I can't do anything else - I
keep getting a no session error? I can do something very similar below
in php and it works fine so I think my arguments are correct. However,I
would like to stick to ruby. I've seen some other posts on this but I'm
not to clear. I'm using Ruby 1.8.6 (2007-09-24 patchlevel 111) and this
is my irb session:-

...
irb(main):032:0> bfsoapclient = SOAP::WSDLDriverFactory.new( wsdl
).create_rpc_driverignored attr: {}abstract
ignored attr: {}nillable
ignored attr: {}mixed
=>
#<SOAP::RPC::Driver:#<SOAP::RPC::Proxy:https://api.betfair.com/global/v3/BFGlobalService>>

irb(main):033:0> bflogin = bfsoapclient.login(:request=>logindetails)
=> #<SOAP::Mapping::Object:0x..fdbd49328
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbd491fc
{}header=#<SOAP::Mapping::Object:0x..fdbd49026 {}errorCode="OK"
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbd48900>
{}sessionToken="MMrLImJigs0OO0u3K5gty8qSPIbwFaZwRyzzLnmOEjo="
{}timestamp="2007-10-10T12:58:04.062Z"> {}currency="GBP"
{}errorCode="OK" {}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbd46b3c>
{}validUntil="0001-01-01T00:00:00.000Z">>

irb(main):034:0> apiRequestHeader = { :clientstamp => 0,:sessionToken =>
bflogin.result.header.sessionToken }
=> {:clientstamp=>0,
:sessionToken=>"MMrLImJigs0OO0u3K5gty8qSPIbwFaZwRyzzLnmOEjo="}

irb(main):035:0> events = bfsoap.getActiveEventTypes(:request =>
{:header=>apiRequestHeader})
=> #<SOAP::Mapping::Object:0x..fdbd3689a
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbd3671e
{}header=#<SOAP::Mapping::Object:0x..fdbd36534 {}errorCode="NO_SESSION"
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbd35d82>
{}sessionToken=#<SOAP::Mapping::Object:0x..fdbd3585a>
{}timestamp="2007-10-10T13:00:25.199Z">
{}eventTypeItems=#<SOAP::Mapping::Object:0x..fdbd34996>
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbd344b4>
{}errorCode="API_ERROR">>

···

--
Posted via http://www.ruby-forum.com/.

Hi,

Peter Aszkenasy wrote:

Hi. I'm trying to use the Betfair API with Ruby:-
http://bdp.betfair.com/exchdevelopers.php

irb(main):034:0> apiRequestHeader = { :clientstamp => 0,:sessionToken =>
bflogin.result.header.sessionToken }
=> {:clientstamp=>0,
:sessionToken=>"MMrLImJigs0OO0u3K5gty8qSPIbwFaZwRyzzLnmOEjo="}

clientstamp => clientStamp

I don't think it causes the server error 'NO_SESSION' though.

irb(main):035:0> events = bfsoap.getActiveEventTypes(:request =>
{:header=>apiRequestHeader})

Please download the WSDL as a local file, then add the following change;

  <xsd:schema
    targetNamespace="http://www.betfair.com/publicapi/types/global/v3/&quot;&gt;

=>

  <xsd:schema
    elementFormDefault="qualified"
    targetNamespace="http://www.betfair.com/publicapi/types/global/v3/&quot;&gt;

(add "elementFormDefault" line)

And please try to use the WSDL to see how it goes?

- From example XML messages of the site, they seems to expect 'header'
element Namespace qualified but the WSDL does not define
'elementFormDefault' to 'qualified'. I think it's just a bug of the
WSDL because the definition for targetNamespace
'http://www.betfair.com/publicapi/v3/BFGlobalService/&#39; in the WSDL has
elementFormDefault='qualified'.

Regards,
// NaHi

Many thanks for answering quickly but still the same problem after
adding:-

Please download the WSDL as a local file, then add the following change;

  <xsd:schema
    targetNamespace="http://www.betfair.com/publicapi/types/global/v3/">

=>

  <xsd:schema
    elementFormDefault="qualified"
    targetNamespace="http://www.betfair.com/publicapi/types/global/v3/">

(add "elementFormDefault" line)

Please see irb output below:-

irb(main):010:0> wsdl_url="BFGlobalService.wsdl"=>
"BFGlobalService.wsdl"
irb(main):011:0> soap = SOAP::WSDLDriverFactory.new( wsdl_url
).create_rpc_driverignored attr: {}abstract
ignored attr: {}nillable
ignored attr: {}mixed
=>
#<SOAP::RPC::Driver:#<SOAP::RPC::Proxy:https://api.betfair.com/global/v3/BFGlobalService>>
irb(main):012:0>
logindetails={:locationId=>0,:password=>"********",:productId=>82,:username=>"showaprofit",:vendorSoftwareId=>0,:ipAddress=>"82.69.38.122"
}
=> {:productId=>82, :username=>"showaprofit", :vendorSoftwareId=>0,
:ipAddress=>"82.69.38.122", :password=>"********", :locationId=>0}
irb(main):013:0> response=soap.login(:request=>logindetails)=>
#<SOAP::Mapping::Object:0x..fdbde4da0
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbde4c88
{}header=#<SOAP::Mapping::Object:0x..fdbde47b0 {}errorCode="OK"
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbde313a>
{}sessionToken="gyfLobWGRgPw+mHI6hD67i49xGJ9nddrywn/hmYn9Hg="
{}timestamp="2007-10-11T09:51:05.569Z"> {}currency="GBP"
{}errorCode="OK" {}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbde03f4>
{}validUntil="0001-01-01T00:00:00.000Z">>
irb(main):014:0> apiRequestHeader={:clientStamp => 0,:sessionToken =>
response.result.header.sessionToken}=>
{:sessionToken=>"gyfLobWGRgPw+mHI6hD67i49xGJ9nddrywn/hmYn9Hg=",
:clientStamp=>0}
irb(main):015:0> response=soap.getActiveEventTypes(:request
=>{:header=>apiRequestHeader})=> #<SOAP::Mapping::Object:0x..fdbdbb702
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbdbb23e
{}header=#<SOAP::Mapping::Object:0x..fdbdbad8e {}errorCode="NO_SESSION"
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbdb9fce>
{}sessionToken=#<SOAP::Mapping::Object:0x..fdbdb9ace>
{}timestamp="2007-10-11T09:54:06.142Z">
{}eventTypeItems=#<SOAP::Mapping::Object:0x..fdbdb7580>
{}minorErrorCode=#<SOAP::Mapping::Object:0x..fdbdb640a>
{}errorCode="API_ERROR">>
irb(main):016:0>

···

--
Posted via http://www.ruby-forum.com/.

Hi,

Peter Aszkenasy wrote:

Please see irb output below:-

irb(main):010:0> wsdl_url="BFGlobalService.wsdl"=>
"BFGlobalService.wsdl"
irb(main):011:0> soap = SOAP::WSDLDriverFactory.new( wsdl_url
).create_rpc_driverignored attr: {}abstract
ignored attr: {}nillable
ignored attr: {}mixed

Oops. I should have known it before. You are using bundled version of
soap4r with ruby 1.8.X, right? Please install latest soap4r stable
release from http://dev.ctor.org/soap4r/#Download

Here's my sample client (BFGlobalService.wsdl is edited locally):

require 'soap/wsdlDriver'
wsdl = 'BFGlobalService.wsdl'
drv = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
drv.wiredump_dev = STDOUT
# no connection and causes EmptyResponseError
drv.test_loopback_response << ''
header = { :clientStamp => 0, :sessionToken => "token" }
p drv.getAllEventTypes(
  :request => {
    :header => {
      :clientStamp => 0,
      :sessionToken => "token"
    },
    :locate => 'en'
  }
)

And the generated request under soap4r-1.5.8:

<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema&quot;
    xmlns:env="Error;
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
  <env:Body>
    <n1:getAllEventTypes
xmlns:n1="http://www.betfair.com/publicapi/v3/BFGlobalService/&quot;&gt;
      <n1:request
xmlns:n2="http://www.betfair.com/publicapi/types/global/v3/&quot;&gt;
        <n2:header>
          <n2:clientStamp>0</n2:clientStamp>
          <n2:sessionToken>token</n2:sessionToken>
        </n2:header>
        <n2:locale xsi:nil="true"></n2:locale>
      </n1:request>
    </n1:getAllEventTypes>
  </env:Body>
</env:Envelope>

When it still does not work, please get a wiredump with
  drv.wiredump_dev = STDOUT
and show me the wiredump.

Regards,
// NaHi

Thankyou very very much - that works! Just for completeness I just
mentioned the commands I used to enable the gem soap4r module to work as
opposed to the built in earlier version version and also how to log in
and obtain the active markets

irb(main):001:0> require 'rubygems'
=> false
irb(main):002:0> gem "soap4r"
=> true
irb(main):003:0> require "soap/wsdlDriver"
=> true
irb(main):004:0> wsdl = "BFGlobalService.wsdl"
=> "BFGlobalService.wsdl"
irb(main):005:0> drv =
SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver
=>
#<SOAP::RPC::Driver:#<SOAP::RPC::Proxy:https://api.betfair.com/global/v3/BFGlobalService>>
logindetails={:locationId=>0,:password=>'bfpasswd',:username=>'bfuser',:productId=>82,:vendorSoftwareId=>0,:ipAddress="82.69.38.122"}
=> {:locationId=>0, :username=>"bfuser", :productId=>82,
:vendorSoftwareId=>0, :ipAddress=>"82.69.38.122", :password=>"bfpasswd"}
irb(main):008:0> response= drv.login(:request=>logindetails)
=> #<SOAP::Mapping::Object:0x..fdbdec00a
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbdeb8da
{}header=#<SOAP::Mapping::Object:0x..fdbdeb56a {}errorCode="OK"
{}minorErrorCode=""
{}sessionToken="r3k89g9Lu+tWRHlenQg7YwraNx/+Din5VPCXsn3r8="
{}timestamp="2007-10-11T14:42:14.600Z"> {}currency="GBP"
{}errorCode="OK" {}minorErrorCode=""
{}validUntil="0001-01-01T00:00:00.000Z">>
irb(main):009:0> apiRequestHeader={:clientStamp => 0,:sessionToken
=>response.result.header.sessionToken}
=> {:clientStamp=>0,
:sessionToken=>"r3k89g9Lu+tWRHlenQg7YwraNx/+Din5VPCXsn3r8="}
irb(main):010:0>
response=drv.getActiveEventTypes(:request=>{:header=>apiRequestHeader})
=> #<SOAP::Mapping::Object:0x..fdbd7e1e0
{http://www.betfair.com/publicapi/v3/BFGlobalService/}Result=#<SOAP::Mapping::Object:0x..fdbd7e154
{}header=#<SOAP::Mapping::Object:0x..fdbd7e0b4 {}errorCode="OK"
{}minorErrorCode=""
{}sessionToken="TXr3k89g9Lu+tWRHlenQg7YwraNx/+Din5VPCXsn3r8="
{}timestamp="2007-10-11T14:43:44.088Z">
{}eventTypeItems=#<SOAP::Mapping::Object:0x..fdbd7811e
{http://www.betfair.com/publicapi/types/global/v3/}EventType=[#<SOAP::Mapping::Object:0x..fdbd7809c
{}id="6423" {}name="American Football" {}nextMarketId="0"
{}exchangeId="0">, #<SOAP::Mapping::Object:0x..fdbd71ad0 {}id="61420"
{}name="Australian Rules" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd71184 {}id="7511" {}name="Baseball"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd6dbba {}id="7522" {}name="Basketball"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd69182 {}id="6" {}name="Boxing"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd663e2 {}id="982477" {}name="Bridge"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd645e2 {}id="4968929" {}name="Combat
Sports" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd6189c {}id="4" {}name="Cricket"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd5c3ba {}id="11" {}name="Cycling"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd58210 {}id="3503" {}name="Darts"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd55100 {}id="6231" {}name="Financial
Bets" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd52b44 {}id="2152880" {}name="Gaelic
Games" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd4d2f2 {}id="3" {}name="Golf"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd463da {}id="4339" {}name="Greyhound
Racing" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd3d5be {}id="15" {}name="Greyhound -
Todays Card" {}nextMarketId="20629641" {}exchangeId="1">,
#<SOAP::Mapping::Object:0x..fdbd38b68 {}id="468328" {}name="Handball"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd34eb4 {}id="7" {}name="Horse Racing"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd2fa22 {}id="13" {}name="Horse Racing -
Todays Card" {}nextMarketId="20628919" {}exchangeId="1">,
#<SOAP::Mapping::Object:0x..fdbd2b1d4 {}id="7524" {}name="Ice Hockey"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd26544 {}id="8" {}name="Motor Sport"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd2108a {}id="5412697" {}name="Pelota"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd1c904 {}id="315220" {}name="P0ker"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd18228 {}id="2378961" {}name="Politics"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd12436 {}id="1477" {}name="Rugby League"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd0bb36 {}id="5" {}name="Rugby Union"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd0633e {}id="6422" {}name="Snooker"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbd017b2 {}id="1" {}name="Soccer"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbcfec1a {}id="14" {}name="Soccer -
Fixtures" {}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbcfab10 {}id="10" {}name="Special Bets"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbcf4f30 {}id="2" {}name="Tennis"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbcf053e {}id="998917" {}name="Volleyball"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbcec7fe {}id="2901849" {}name="Water Polo"
{}nextMarketId="0" {}exchangeId="0">,
#<SOAP::Mapping::Object:0x..fdbce701a {}id="451485" {}name="Winter
Sports" {}nextMarketId="0" {}exchangeId="0">]> {}minorErrorCode=""
{}errorCode="OK">>
irb(main):011:0>

···

--
Posted via http://www.ruby-forum.com/.

Hi,

Peter Aszkenasy wrote:

Thankyou very very much - that works!

Good.

Can you confirm that the local WSDL editing is needed or not? I'll
contact to the server administrator if the WSDL is wrong.

Regards,
// NaHi

Yes - once I downloaded and edited the wsdl file locally as per your
instructions, everything is now working. Using the remote service
(soap4r 1.5.8) without downloading the wsdl file results in the
following error:-

irb(main):001:0> require 'rubygems'
=> false
irb(main):002:0> gem "soap4r"
=> true
irb(main):003:0> require "soap/wsdlDriver"
=> true
irb(main):004:0> wsdl =
"https://api.betfair.com/global/v3/BFGlobalService"
=> "https://api.betfair.com/global/v3/BFGlobalService"
irb(main):005:0> bfsoapclient = SOAP::WSDLDriverFactory.new(
wsdl).create_rpc_driver
RuntimeError: Unexpected response: #<HTTP::Message::Headers:0xb7a1abf0
@response_status_code=404, @chunked=false, @body_charset=nil,
@request_uri=nil, @header_item=[["Server", "Apache-Coyote/1.1"],
["X-Powered-By", "Servlet 2.4; JBoss-4.0.5.GA (build: CVSTag=Branch_4_0
date=200610162339)/Tomcat-5.5"], ["Server", "TME-GLUE/5.0.2"], ["Date",
"Thu, 11 Oct 2007 15:12:23 GMT"], ["Content-Type",
"text/html;charset=ISO-8859-1"], ["Content-Length", "1510"]],
@body_type=nil, @request_method=nil, @body_date=nil,
@request_via_proxy=nil, @is_request=false, @reason_phrase="cannot find
/var/sportex/betex/as/jboss-4.0.5.GA/server/betex/./tmp/deploy/tmp64997japi-public-ws-global-application-8.4.2-8.ear-contents/api-public-ws-global-5.0-exp.war/BFGlobalService",
@body_size=0, @request_query=nil, @http_version="1.1">
        from
/usr/lib/ruby/gems/1.8/gems/httpclient-2.1.2/lib/httpclient.rb:2058:in
`follow_redirect'
        from
/usr/lib/ruby/gems/1.8/gems/httpclient-2.1.2/lib/httpclient.rb:1890:in
`get_content'
        from
/usr/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/wsdl/xmlSchema/importer.rb:73:in
`fetch'
        from
/usr/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/wsdl/xmlSchema/importer.rb:36:in
`import'
        from
/usr/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/wsdl/importer.rb:18:in
`import'
        from
/usr/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/wsdlDriver.rb:146:in
`import'
        from
/usr/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/wsdlDriver.rb:32:in
`initialize'
        from (irb):5:in `new'
        from (irb):5

···

--
Posted via http://www.ruby-forum.com/.

I installed soap4r as a gem as specified on that soap4r page, and now
when I start my site I get. When I installed soap4r, I DID include
dependencies:

blake-millers-power-mac-g5:trunk bmiller$ script/server
./script/../config/boot.rb:29:Warning: require_gem is obsolete. Use gem
instead.
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:478:in
`const_missing': uninitialized constant XSD::NS::KNOWN_TAG (NameError)
  from /usr/local/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/ns.rb:18
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in
`new_constants_in'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/generator.rb:10
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
   ... 47 levels...
  from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:61:in `require_gem'
  from ./script/../config/boot.rb:29
  from script/server:2:in `require'
  from script/server:2

···

--
Posted via http://www.ruby-forum.com/.

I fixed it. I didn't have the gem declaration:
require 'rubygems'
gem 'soap4r'

···

At the top of environment.rb Blake Miller wrote:

I installed soap4r as a gem as specified on that soap4r page, and now
when I start my site I get. When I installed soap4r, I DID include
dependencies:

blake-millers-power-mac-g5:trunk bmiller$ script/server
./script/../config/boot.rb:29:Warning: require_gem is obsolete. Use gem
instead.
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:478:in
`const_missing': uninitialized constant XSD::NS::KNOWN_TAG (NameError)
  from /usr/local/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/ns.rb:18
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in
`new_constants_in'
  from
/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in
`require'
  from
/usr/local/lib/ruby/gems/1.8/gems/soap4r-1.5.8/lib/soap/generator.rb:10
  from
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in
`gem_original_require'
   ... 47 levels...
  from /usr/local/lib/ruby/site_ruby/1.8/rubygems.rb:61:in `require_gem'
  from ./script/../config/boot.rb:29
  from script/server:2:in `require'
  from script/server:2

--
Posted via http://www.ruby-forum.com/\.