Scalatra не может найти представление при автономном развертывании

Я использую документацию scalatra и плагин sbt-assembly для создания автономной банки. Он работает на моей локальной машине (Debian Wheezy с OpenJdk 1.7.0), но не работает на удаленной машине EC2 (Ubuntu 12.04.2 LTS), на которой работает тот же Jdk.

Сообщение об исключении:

org.fusesource.scalate.util.ResourceNotFoundException: Could not load resource: [index.ssp]; are you sure it's within [/home/abc/src/main/webapp]?
    at org.fusesource.scalate.servlet.ServletResourceLoader.createNotFoundException(ServletResourceLoader.scala:79)
    at org.fusesource.scalate.util.ResourceLoader$class.resourceOrFail(ResourceLoader.scala:55)
    at org.fusesource.scalate.servlet.ServletResourceLoader.resourceOrFail(ServletResourceLoader.scala:37)
    at org.fusesource.scalate.util.UriResource.delegate(Resource.scala:91)
    at org.fusesource.scalate.util.DelegateResource.text(Resource.scala:216)
    at org.fusesource.scalate.ssp.SspCodeGenerator.generate(SspCodeGenerator.scala:152)
    at org.fusesource.scalate.TemplateEngine.compileAndLoad(TemplateEngine.scala:750)
    at org.fusesource.scalate.TemplateEngine.compileAndLoadEntry(TemplateEngine.scala:699)
    at org.fusesource.scalate.TemplateEngine.liftedTree1$1(TemplateEngine.scala:419)

Он говорит, что не может найти представление, но точно такой же файл jar работает на моем локальном компьютере.


person user2668128    schedule 27.08.2013    source источник
comment
В руководстве по Scalatra сказано, что я могу развернуть банку scalatra.org/2.2/guides/deployment /standalone.html. Я неправильно понял это?   -  person user2668128    schedule 28.08.2013


Ответы (1)


Вам нужно установить правильную ресурсную базу на встроенном Jetty. Вот три варианта:

  1. прикрепите ресурсы к файлу .jar, следуя инструкциям в https://stackoverflow.com/a/17913254/1590415

    val rb = getClass.getClassLoader.getResource("webapp").toExternalForm
    context.setResourceBase(rb)
    
  2. поместите ресурсы в папку в файловой системе

    val rb = "webapp"
    context.setResourceBase(rb)
    
  3. используйте плагин scalatra-sbt, у него есть задача dist, которая создает дистрибутив .zip. Рабочий проект см. здесь . Вы можете вызвать задачу, набрав dist в приглашении SBT.

    val myDistSettings = DistPlugin.distSettings ++ Seq(
      mainClass in Dist := Some("ScalatraLauncher"),
      memSetting in Dist := "2g",
      permGenSetting in Dist := "256m",
      envExports in Dist := Seq("LC_CTYPE=en_US.UTF-8", "LC_ALL=en_US.utf-8"),
      javaOptions in Dist ++= Seq("-Xss4m", "-Dfile.encoding=UTF-8")
    )
    

По моему опыту, Jetty загружает веб-ресурсы из .jar очень медленно, поэтому вам лучше поместить их в папку в файловой системе. Варианты 2 и 3 загружают ресурсы из файловой системы.

person Stefan Ollinger    schedule 02.09.2013
comment
Загрузка Jar действительно медленная, я наблюдал 10-кратное время отклика с шаблонами Mustache на Scalatra. - person Petteri H; 13.10.2014