Skip to content

Commit

Permalink
use scripting container to initialize the runtime
Browse files Browse the repository at this point in the history
Signed-off-by: Nick Sieger <nick@nicksieger.com>
  • Loading branch information
calavera authored and nicksieger committed Mar 21, 2011
1 parent 860dbe0 commit 5f51d8f
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions src/main/java/org/jruby/rack/DefaultRackApplicationFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.jruby.Ruby;
import org.jruby.RubyInstanceConfig;
import org.jruby.exceptions.RaiseException;
import org.jruby.embed.ScriptingContainer;
import org.jruby.embed.LocalContextScope;
import org.jruby.javasupport.JavaEmbedUtils;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;
Expand Down Expand Up @@ -81,8 +83,9 @@ public Ruby newRuntime() throws RackInitializationException {
Ruby runtime = (Ruby) rackContext.getAttribute("jruby.runtime");
if (runtime == null) {
setupJRubyManagement();
RubyInstanceConfig config = createRuntimeConfig();
runtime = JavaEmbedUtils.initialize(config.loadPaths(), config);
ScriptingContainer container = newContainer();

runtime = container.getProvider().getRuntime();
}
if (rackContext.getConfig().isIgnoreEnvironment()) {
runtime.evalScriptlet("ENV.clear");
Expand Down Expand Up @@ -197,6 +200,23 @@ private interface ApplicationObjectFactory {
IRubyObject create(Ruby runtime);
}

private ScriptingContainer newContainer() {
RubyInstanceConfig config = createRuntimeConfig();

ScriptingContainer container = new ScriptingContainer(LocalContextScope.SINGLETHREAD);

container.setClassLoader(Thread.currentThread().getContextClassLoader());
container.setHomeDirectory(config.getJRubyHome());
container.setEnvironment(config.getEnvironment());
container.setLoadPaths(config.loadPaths());

if (rackContext.getConfig().getCompatVersion() != null) {
container.setCompatVersion(config.getCompatVersion());
}

return container;
}

private RackApplication createApplication(final ApplicationObjectFactory appfact)
throws RackInitializationException {
try {
Expand Down

0 comments on commit 5f51d8f

Please sign in to comment.