This looks like a subtle loading/dependencies bug with Arel 1.0,
ActiveSupport::Dependencies and the way that you're initializing
Rails. I'm not sure exactly what needs to be corrected, but I'd
suggest making sure that AS::Dependencies are turned off (i.e, run
Rails in production mode with eager loading). That should disable the
AS constant lookup behavior that's causing you this problem.

/Nick

On Wed, May 4, 2011 at 10:25 AM, Michael Fair <[email protected]> wrote:
> Hi I'm using Redbridge to integrate my rails site with the shinidig project
> to allow it to act as an open social container. For the most part the code
> to retrieve data is working with my models but when I try to do anything
> that modifies data I get the following exception (Note the *** bold line in
> the exception indicating the line in the script):
>
> NameError: uninitialized constant Arel::Relation::Session
>               load_missing_constant at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:506
>                       const_missing at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:183
>                                each at org/jruby/RubyArray.java:1572
>                       const_missing at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:181
>                             session at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/arel-1.0.1/lib/arel/algebra/relations/relation.rb:10
>                              insert at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/arel-1.0.1/lib/arel/algebra/relations/relation.rb:159
>                                send at org/jruby/RubyKernel.java:2042
>                              insert at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/relation.rb:14
>                              create at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/persistence.rb:271
>                              create at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/timestamp.rb:47
>                              create at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/callbacks.rb:281
>               _run_create_callbacks at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activesupport-3.0.0/lib/active_support/callbacks.rb:428
>                              create at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/callbacks.rb:281
>                    create_or_update at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/persistence.rb:247
>                    create_or_update at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/callbacks.rb:277
>                 _run_save_callbacks at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activesupport-3.0.0/lib/active_support/callbacks.rb:438
>                    create_or_update at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/callbacks.rb:277
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/persistence.rb:39
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/validations.rb:43
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/attribute_methods/dirty.rb:21
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:237
>   with_transaction_returning_status at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:289
>                         transaction at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/connection_adapters/abstract/database_statements.rb:139
>                         transaction at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:204
>   with_transaction_returning_status at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:287
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:237
>       rollback_active_record_state! at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:248
>                                save at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/transactions.rb:236
>                              create at /home/mike/Aptana Studio 3
> Workspace/shindig/java/server/src/main/webapp/WEB-INF/lib/jruby/1.8/gems/activerecord-3.0.0/lib/active_record/base.rb:498
>                              *** (root) at <script>:3
> May 4, 2011 10:56:24 AM org.apache.shindig.protocol.ApiServlet
> responseItemFromException
> INFO: Returning a response error as result of a protocol exception.
> org.jruby.embed.EvalFailedException: (NameError) uninitialized constant
> Arel::Relation::Session
>     at
> org.jruby.embed.internal.EmbedEvalUnitImpl.run(EmbedEvalUnitImpl.java:127)
>     at
> org.jruby.embed.ScriptingContainer.runUnit(ScriptingContainer.java:1229)
>     at
> org.jruby.embed.ScriptingContainer.runScriptlet(ScriptingContainer.java:1222)
>     at
> org.apache.shindig.social.sample.spi.zooOpensocialService.createActivity(zooOpensocialService.java:223)
>     at
> org.apache.shindig.social.opensocial.service.ActivityHandler.create(ActivityHandler.java:100)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>     at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at
> org.apache.shindig.protocol.DefaultHandlerRegistry$MethodCaller.call(DefaultHandlerRegistry.java:483)
>     at
> org.apache.shindig.protocol.DefaultHandlerRegistry$RpcInvocationHandler.execute(DefaultHandlerRegistry.java:302)
>     at
> org.apache.shindig.protocol.DefaultHandlerRegistry$RpcInvocationWrapper.execute(DefaultHandlerRegistry.java:326)
>     at
> org.apache.shindig.protocol.JsonRpcServlet.dispatchBatch(JsonRpcServlet.java:186)
>     at
> org.apache.shindig.protocol.JsonRpcServlet.service(JsonRpcServlet.java:131)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.apache.shindig.gadgets.servlet.ETagFilter.doFilter(ETagFilter.java:55)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.apache.shindig.auth.AuthenticationServletFilter.callChain(AuthenticationServletFilter.java:130)
>     at
> org.apache.shindig.auth.AuthenticationServletFilter.doFilter(AuthenticationServletFilter.java:90)
>     at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
>     at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
>     at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
>     at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:203)
>     at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
>     at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
>     at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:558)
>     at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>     at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:379)
>     at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
>     at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:259)
>     at
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:281)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>     at java.lang.Thread.run(Thread.java:662)
> Caused by: org.jruby.exceptions.RaiseException: (NameError) uninitialized
> constant Arel::Relation::Session
>
> The java code to run the function is (Again the bolded *** to indicate where
> the exception occurs) :
>
> public Future<Void> createActivity(UserId userId, GroupId groupId, String
> appId, Set<String> fields, Activity activity, SecurityToken token) throws
> ProtocolException {
>         container.put("userId", userId.getUserId(token));
>         container.put("appId", appId);
>         container.put("fields", fields);
>         container.put("activity", activity);
>         String script = new StringBuilder()
>                 .append("a = userId.split('.')\n")
>                 .append("attribs = {:owner_id=>a[1].to_i, :owner_type=>a[0],
> :source_id=>appId.to_i, :title=>activity.getTitle,
> :body=>activity.getBody}\n")
>                 .append("Activity.create(attribs)\n") //***
>                 .toString();
>         container.runScriptlet(script);
>         return ImmediateFuture.newInstance(null);
>     }
>
> and to initialize jruby and load the rails models I have:
>
> private String basepath;
>     private ScriptingContainer container;
>     private List loadPaths;
>
>     /**
>    * The JSON<->Bean converter
>    */
>     private BeanConverter converter;
>     @Inject
>     public zooOpensocialService(@Named("shindig.bean.converter.json")
>   BeanConverter converter) throws ScriptException{
>         //engine = new ScriptEngineManager().getEngineByName("jruby");
>        // System.setProperty("org.jruby.embed.class.path", "Zoo");
>         //engine.eval("puts $:.inspect");
>         //engine.eval("require 'Zoo/config/environment.rb'");
>         this.converter = converter;
>
> /********************************************************************************************
>          * Note basepath is hacked to static location for now. Find a way to
> use server context or load
>          * from configuration file for easier deployment.
>          */
>         basepath = "/usr/local/tomcat/webapps/ROOT/WEB-INF";
>         container = new ScriptingContainer(LocalContextScope.CONCURRENT,
> LocalVariableBehavior.TRANSIENT);
>         container.setClassLoader(container.getClass().getClassLoader());
>         container.put("load_path", basepath + "/lib/Zoo");
>         container.put("gem_path", basepath + "/lib/jruby/1.8");
>         container.put("gemfile", basepath + "/lib/Zoo/Gemfile");
>         String script =
>                 "$LOAD_PATH << load_path; ENV['GEM_HOME'] = gem_path;
> ENV['BUNDLE_GEMFILE'] = gemfile\n" +
>                 "require 'config/environment'\n" +
>                 "ActionController::Routing::Routes.finalize!";
>         container.runScriptlet(script);
>     }
>

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to