5

本番環境(amazon linux EC2 AMI)では口ひげ再生エラーが発生しますが、開発環境(MAC)では発生しません。代わりにjdkを使用して、jvmをアップグレードし、Tomcatデプロイモデルから開発環境に一致するように変更してみました。可能ですが、何も機能していません。どんな助けでも大歓迎です。口ひげを使ったjavaとjavascriptの共有コードがたくさんあり、java側で口ひげを捨てる必要がある場合は、すべてを書き直すのは大変なことです。

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

問題はスレッドローカルにあるようです。私のログによると、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の実装を変更しました。変更された行はコメントアウトされました:

    //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

あなたの問題を再現するのは難しいので、ここでいくつかの指針を示します。envの問題である問題を排除しようとしました。したがって、他の考えられる問題は

  1. データの問題:多くの場合、本番環境の問題の理由は、実際のデータとテストデータの違いです。NPEの原因となっているデータの問題があるかどうかを確認してください。

  2. コードの問題:問題のpeople.html.(line:22)​​原因は何かありますか。最初にそれを削除/変更して、問題が発生していないかどうかを確認してください。mustacheまたは、 (使用している正確なバージョンの)ソースコードを取得して、作成しようとしているオブジェクトと失敗した場所を確認できますか。

  3. さまざまな環境のプロパティファイル:環境ごとに異なるプロパティファイルがありますか?はいの場合、prod envのプロパティを見逃していませんか?

于 2012-06-27T09:59:45.327 に答える
0

32行目のMustacheTags.javaにNullPointerExceptionがあります。

これは、おそらくMustacheライブラリのメソッドを呼び出して、null値を渡していることを意味します。このメソッドに転送するすべてのパラメーターをログに記録してみてください(MyStuff.javaの183行目?)。

ここでMustacheTagsのソースコードを見ることができます。これは、渡す値と渡す必要がある値を理解するのに役立つ場合があります。

于 2012-06-27T12:09:53.667 に答える