views:

568

answers:

1

Anyone else playing with ironruby?

I have successfully got the IronRuby.Rails.Example project running on my local machine under IIS 5.1. I am now attempting to get my own demo rails site running in the same way.

My web.config is slightly different from the example project. I am attempting to only use what was distributed with IronRuby 1.0 and what I have installed using gems.

I am getting the following error which doesn't give me a lot to go on:

D:/demo/config/boot.rb:66:in `exit': exit (SystemExit)

After trying many different things, I think it is having a problem finding gems. I have attached my web config and ironrack.log. Does anyone have pointers on what I am doing wrong?

Thanks!

<?xml version="1.0"?>
<configuration>
    <configSections>
        <!-- custom configuration section for DLR hosting -->
        <section name="microsoft.scripting" type="Microsoft.Scripting.Hosting.Configuration.Section, Microsoft.Scripting" requirePermission="false"/>
    </configSections>
    <system.webServer>
        <handlers>
            <!-- clear all other handlers first. Don't do this if you have other handlers you want to run -->
            <clear/>
            <!-- This hooks up the HttpHandler which will dispatch all requests to Rack -->
            <add name="IronRuby" path="*" verb="*" type="IronRuby.Rack.HttpHandlerFactory, IronRuby.Rack" resourceType="Unspecified" requireAccess="Read" preCondition="integratedMode"/>
        </handlers>
    </system.webServer>
    <system.web>
        <!-- make this true if you want to debug any of the DLR code, IronRuby.Rack, or your own managed code -->
        <compilation debug="true"/>
    <httpHandlers>
      <!-- clear all other handlers first. Don't do this if you have other handlers you want to run -->
      <clear/>
      <!-- This hooks up the HttpHandler which will dispatch all requests to Rack -->
      <add path="*" verb="*" type="IronRuby.Rack.HttpHandlerFactory, IronRuby.Rack" />
    </httpHandlers>
    </system.web>
    <!-- DLR configuration. Set debugMode to "true" if you want to debug your dynamic language code with VS -->
    <microsoft.scripting debugMode="false">
        <options>
            <!-- Library paths: make sure these paths are correct -->
            <!--<set option="LibraryPaths" value="..\..\..\Languages\Ruby\libs\;
                                                  ..\..\..\..\External.LCA_RESTRICTED\Languages\Ruby\ruby-1.8.6p368\lib\ruby\site_ruby\1.8\;
                                                  ..\..\..\..\External.LCA_RESTRICTED\Languages\Ruby\ruby-1.8.6p368\lib\ruby\1.8\"/>-->
            <set option="LibraryPaths" value="C:\IronRuby\lib\IronRuby;C:\IronRuby\lib\ruby\1.8;C:\IronRuby\lib\ruby\site_ruby;C:\IronRuby\lib\ruby\site_ruby\1.8"/>
        </options>
    </microsoft.scripting>
    <appSettings>
        <add key="AppRoot" value="."/>
        <add key="Log" value="ironrack.log"/>
        <!-- <add key="GemPath" value="..\..\..\..\External.LCA_RESTRICTED\Languages\Ruby\ruby-1.8.6p368\lib\ruby\gems\1.8"/> -->
        <add key="GemPath" value="C:\IronRuby\Lib\ironruby\gems\1.8\gems"/>
        <add key="RackEnv" value="production"/>
    </appSettings>
</configuration>

=== Booting ironruby-rack at 4/15/2010 1:27:12 PM [DEBUG] >>> TOPLEVEL_BINDING = binding
=> Setting GEM_PATH: 'C:\\IronRuby\\Lib\\ironruby\\gems\\1.8\\gems'
=> Setting RACK_ENV: 'production'
=> Loading RubyGems [DEBUG] >>> require 'rubygems'
=> Loading Rack >=1.0.0 [DEBUG] >>> gem 'rack', '>=1.0.0';require 'rack'
=> Loaded rack-1.1
=> Application root: 'D:\\demo'
=> Loading Rack application [DEBUG] >>> Rack::Builder.new { (
    require "config/environment"

    ENV['RAILS_ENV'] = 'development'

    use Rails::Rack::LogTailer
    use Rails::Rack::Static
    run ActionController::Dispatcher.new
    ) }.to_app exit
    D:/demo/config/boot.rb:66:in `exit': exit (SystemExit)
        from D:/demo/config/boot.rb:66:in `load_rails_gem'
        from D:/demo/config/boot.rb:54:in `load_initializer'
        from D:/demo/config/boot.rb:38:in `run'
        from D:/demo/config/boot.rb:11:in `boot!'
        from D:/demo/config/boot.rb:110
        from C:/IronRuby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from C:/IronRuby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from D:/demo/config/environment.rb:7
        from C:/IronRuby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from C:/IronRuby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from (eval):1
        from C:/IronRuby/lib/ironruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `instance_eval'
        from C:/IronRuby/lib/ironruby/gems/1.8/gems/rack-1.1.0/lib/rack/builder.rb:46:in `initialize'
        from (eval):0
        from D:\Dev\ironruby\ironruby-ironruby-20bc41b\Merlin\Main\Hosts\IronRuby.Rack\RubyEngine.cs:52:in `Execute'
        from D:\Dev\ironruby\ironruby-ironruby-20bc41b\Merlin\Main\Hosts\IronRuby.Rack\RubyEngine.cs:45:in `Execute'
        from D:\Dev\ironruby\ironruby-ironruby-20bc41b\Merlin\Main\Hosts\IronRuby.Rack\Application.cs:68:in `Rackup'
        from D:\Dev\ironruby\ironruby-ironruby-20bc41b\Merlin\Main\Hosts\IronRuby.Rack\Application.cs:32:in `.ctor'
        from D:\Dev\ironruby\ironruby-ironruby-20bc41b\Merlin\Main\Hosts\IronRuby.Rack\HttpHandlerFactory.cs:37:in `GetHandler'
        from System.Web:0:in `MapHttpHandler'
        from System.Web:0:in `System.Web.HttpApplication.IExecutionStep.Execute'
        from System.Web:0:in `ExecuteStep'
        from System.Web:0:in `ResumeSteps'
        from System.Web:0:in `System.Web.IHttpAsyncHandler.BeginProcessRequest'
        from System.Web:0:in `ProcessRequestInternal'
        from System.Web:0:in `ProcessRequestNoDemand'
        from System.Web:0:in `ProcessRequest'
+1  A: 

exit is the way to programmatically quit in ruby.

The idea behind rack is it is a middleware between ruby web frameworks, and the actual app server. By decoupling that, it lets the myriad ruby frameworks (rails, sinatra, ramaze, etc) target a single interface, and the myriad app servers (mongrel, apache with passenger, unicorn, etc) do the same. What it looks like is the IR guys are trying to get rack working with IIS. I did a quick googling for rails on rack configuration, and found this page

the output looks similar to what you see in the rails server method. I would try to figure out where this is coming from

require "config/environment"

ENV['RAILS_ENV'] = 'development'

use Rails::Rack::LogTailer
use Rails::Rack::Static
run ActionController::Dispatcher.new
) }.to_app exit

and try to make it closer to what is in that guide. If you can't get it there, I would try posting on the IR mailing list. They tend to be fairly friendly, and since this is such a fringe thing at the moment, they may be the only ones with enough expertise to help.

Good luck :-)

Matt Briggs
you were totally on the right path. I had both Rack version 1.0.1 and 1.1.0 gems installed. I uninstalled 1.1.0 and now I am getting through to a routing error.. so it looks like I am on the path to enlighenment again.
NotMyself
sweet, glad I was able to help :)
Matt Briggs
@NotMyself - It seems that I'm on the same path as you are; I ran into the 'exit' problem first, and uninstalling 1.1.0 fixed that for me as well. Were you able to figure out the routing error?
Brian Sullivan
Never mind! Figured it out. All I had to do was add the following line to my development.rb: config.action_controller.relative_url_root = "/irails"where "irails" is the name of my virtual directory in IIS. Easy!
Brian Sullivan