Как загрузить измененные классы, которые были импортированы, масштабироваться без перезапуска? - PullRequest
0 голосов
/ 11 марта 2011

Я использую scalate в качестве шаблонов представления и sbt + jrebel.Но я обнаружил, что если классы, импортированные в scalate, были изменены, нам нужно перезапустить причину, или могут возникнуть ошибки усложнения.

Код довольно прост:

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 as:

package test

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

Посетите страницу еще раз, исправьте:

AAA#######

Затем измените имя метода:

package test

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

и index.jade invokeb():

- 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

Посетите снова, и все идет хорошо.

Как решить эту проблему, или есть ли другиеСпособ работы со Scate без перезапуска?


ОБНОВЛЕНИЕ

После почти 1 недели попыток я должен отказаться.Я перепробовал все решения, которые смог найти, но он все равно не может быть скомпилирован без перезапуска.

Теперь я просто запускаю sbt без jrebel и позволяю jetty перезагружать веб-приложение, когда классы модифицированы (не отслеживать масштабные представления).).На данный момент это занимает от 3 до 5 секунд, что не слишком долго.

Наконец, спасибо за помощь @James

Ответы [ 2 ]

1 голос
/ 11 марта 2011
0 голосов
/ 11 марта 2011

В каком режиме вы работаете? Я считаю, что системное свойство scalate.mode по умолчанию используется для производства в источнике (https://github.com/scalate/scalate/blob/master/scalate-core/src/main/scala/org/fusesource/scalate/TemplateEngine.scala)

...