IronRuby > Frequently Asked Questions > How can I execute a Ruby script from a .NET program?

How can I execute a Ruby script from a .NET program?

Table of contents
No headers

Here is some code that we put together for the ASP.NET MVC team. They used it to prototype their IronRuby integration that we showed at Tech Ed 2008. Here's how you can execute a simple file:

using Microsoft.Scripting.Hosting;

var runtime = ScriptRuntime.Create();      
runtime.ExecuteFile("MyController.rb")

Where MyController.rb contains:

class MyController
  def do_foo a, b
    puts a, b
  end
end

This will define the MyController class and the do_foo method. Here's some code that instantiates the controller and retrieves the action method:

var engine = runtime.GetEngine("Ruby");
// TODO: should check that the values are identifiers
var code = String.Format("{0}.new.method :{1}", "MyController", "do_foo");
var action = engine.CreateScriptSourceFromString(code).Execute();

The action variable now holds on do_foo method bound to the controller instance. You can invoke it by:

var result = engine.Operations.Call(action, 1, 2);

The definitive reference is the DLR hosting specification.

Tag page

Files 1

FileSizeDateAttached by 
 dlr-spec-hosting.pdf
Draft DLR Hosting Specification
1280.84 kB17:50, 23 Jun 2008jflamActions
Viewing 4 of 4 comments: view all
This doesn't work (why am I not suprised!
Posted 13:31, 23 Jun 2008
Updated the sample as per StephenDenisEdwards' comment. Thanks!
Posted 16:02, 23 Jun 2008
It's worthwhile noting this does not work off the shelf in some situations. As long as the IronRuby libraries are not in the GAC by default (perhaps through installation process) you might need to explicitly drag them into your processes address space.
In my latest project, I had to issue code like

var runtime = IronRuby.Ruby.CreateRuntime();
try {
var foo = Ruby.Runtime.Protocols.Normalize(10);
} catch {}

otherwise I got really bad problems
Posted 19:55, 13 Jul 2008
This code worked fine for me, but the real gem here is the DLR Hosting Specification... Answered so many questions I had.
Posted 19:31, 12 Aug 2008
Viewing 4 of 4 comments: view all
You must login to post a comment.