ビューテンプレートとして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の助けに感謝します