0

ビューテンプレートとしてscalateを使用しており、sbt+jrebelを使用しています。しかし、scalateにインポートされたクラスが変更されている場合は、jettyを再起動する必要があります。そうしないと、複雑なエラーが発生する可能性があります。

コードは非常に単純です。

webapp / WEB-INF / web.xml

<web-app version="2.5">
  <filter>
    <filter-name>TemplateEngineFilter</filter-name>
    <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>TemplateEngineFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

src / main / scala / test.scala

package test

object A {
    def a() = "AAA"
}

webapp / index.jade

- import test.A._
= a()

桟橋の自動リロードを無効にする

class TestProject(info: ProjectInfo) extends DefaultWebProject(info) {
    override val scanDirectories = Nil
}

次に、桟橋を開始します。

> sbt
> jetty-run
> ~prepare-webapp

ホームページにアクセス:

http://localhost:8080/

正しく表示されます:

AAA

次に、次のように変更しtest.scalaます。

package test

object A {
    def a() = "AAA#######"
}

もう一度ページにアクセスしてください。正解です。

AAA#######

次に、メソッド名を変更します。

package test

object A {
    def b() = "AAA#######"
}

呼び出しindex.jadeますb()

- import test.A._
= b()

もう一度アクセスして、エラーを表示します。

Server Error: We're sorry, but something went wrong.
We've been notified about this issue and we'll take a look at it shortly.

このサンプルから、どこが間違っているかはわかりませんが、私の別のプロジェクトでは、理由を確認できます。index.jadeのコンパイルに失敗し、値b()が見つかりません

だから私は突堤を再起動する必要があります:

> jetty-restart

もう一度アクセスすると、すべてがうまくいきます。

この問題を修正する方法、または再起動せずにscalateを操作する他の方法はありますか?


アップデート

1週間近く試した後、私はあきらめなければなりません。見つけたすべての解決策を試しましたが、再起動しないとコンパイルできません。

今、私はjrebelなしでsbtを実行し、クラスが変更されたときにjettyにwebappをリロードさせます(スケールビューを監視しません)。今のところ、3〜5秒かかりますが、それほど長くはありません。

最後に、@Jamesの助けに感謝します

4

2 に答える 2

1

ユーザーリストの回答を参照してください

于 2011-03-11T11:29:03.070 に答える
0

どのモードで実行していますか?システムプロパティscalate.modeは、デフォルトでソース(https://github.com/scalate/scalate/blob/master/scalate-core/src/main/scala/org/fusesource/scalate/TemplateEngine)で本番環境に設定されていると思います。スカラ)

于 2011-03-11T11:08:22.610 に答える