5

我们在生产(amazon linux EC2 AMI)中遇到胡须播放错误,但在开发(MAC)中没有,我们尝试升级 jvm,改用 jdk,并从 tomcat 部署模型更改以匹配我们的开发环境可能,但没有任何效果。请任何帮助将不胜感激。我们在 java 和 javascript 中有很多使用 mustache 的共享代码,如果我们不得不在 java 端抛弃 mustache,那么重写所有内容将是一件大事。

20:48:52,403 错误 ~

@6al2dd0po
Internal Server Error (500) for request GET /mystuff/people

Execution exception (In {module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java around line 32)
NullPointerException occured : null

play.exceptions.JavaExecutionException
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:90)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
    at play.templates.Template.render(Template.java:26)
    at play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
    at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
    at play.mvc.Controller.renderTemplate(Controller.java:660)
    at play.mvc.Controller.renderTemplate(Controller.java:640)
    at play.mvc.Controller.render(Controller.java:695)
    at controllers.MyStuff.people(MyStuff.java:183)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.modules.mustache.MustacheTags._template(MustacheTags.java:32)
    at play.modules.mustache.MustacheTags$_template.call(Unknown Source)
    at /app/views/User/people.html.(line:22)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
    ... 13 more
4

3 回答 3

1

似乎问题出在threadlocal上。根据我的日志,在 Prod 中,会话使用主线程初始化。

     [2012-06-30 18:35:38,102] INFO 10097[**main**] - Mustache module initialized

但是,MustacheTag 会在请求期间尝试使用类似这样的各种线程进行访问。

     [2012-06-30 17:48:44,669] INFO 66048[**play-thread-1**] - [{module:mustache-0.2}/app/play/modules/mustache/MustacheTags.java:46] _meta() :: MustachePlugin.session():null

所以我像这样改变了 MustachePlugin 的实现。Changed 行注释掉了:

    //private static ThreadLocal<MustacheSession> session_ = new ThreadLocal<MustacheSession>();
    private static MustacheSession _session = null;
    public static MustacheSession session(){
    //return session_.get();
    return _session;
    }
    public void onConfigurationRead(){
    // some code
    _session = new MustacheSession(compiler, root);
    // some code
    }

现在在 prod 模式下工作正常!我看不出为什么它应该首先在 ThreadLocal 中,因为会话在启动时被初始化!

于 2012-06-30T14:38:36.800 回答
0

您的问题很难重现,所以我将在这里给出一些指示。您已尝试消除环境问题。所以其他可能的问题可能是

  1. 数据问题:很多时候生产问题的原因通常是实际数据和测试数据的差异。检查是否导致 NPE 的数据问题。

  2. 代码问题:是否有people.html.(line:22)导致问题的原因。首先尝试删除/更改它以检查是否导致问题。或者您能否获取mustache(您正在使用的确切版本)的源代码,并查看它试图创建的对象以及失败的位置。

  3. 不同环境的属性文件:每个环境都有不同的属性文件吗?如果是,您是否错过了 prod env 的任何属性?

于 2012-06-27T09:59:45.327 回答
0

在第 32 行的 MustacheTags.java 上有一个 NullPointerException。

这意味着您可能正在调用 Mustache 库的方法并传递一个空值。尝试记录您传输到此方法的所有参数(MyStuff.java 第 183 行?)。

您可以在此处查看MustacheTags 的源代码,它可能会帮助您了解要传递的值以及应该传递的值。

于 2012-06-27T12:09:53.667 回答