Getting Rails Application Running Under IronRuby Rack
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/r开发者_运维问答ack-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'
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 :-)
精彩评论