Создайте новый пример приложения play2:
play new test
Тогда:
cd test
play run
Посетите http://localhost:9000
, мы видим, что домашняя страница по умолчанию отображается правильно.
Но когда я расстаюсь с ним:
play dist
И загрузите сгенерированный dist/test-1.0-SNAPSHOT.zip
на сервер, распакуйте его и запустите:
cd test-1.0.SNAPSHOT
./start
Затем посетите http://myserver:9000
, я обнаружил, что файл css не найден.
GET http://myserver:9000/assets/stylesheets/main.css
404
Поскольку приложение представляет собой встроенный пример, предоставленный play2, не означает ли это, что это ошибка play2?
PS:
Файл routes
:
# Map static resources from the /public folder to the /public path
GET /assets/*file controllers.Assets.at(path="/public", file)
И Assets.scala
, предоставляемый play2:
object Assets extends Controller {
def at(path: String, file: String): Action[AnyContent] = Action { request =>
val resourceName = Option(path + "/" + file).map(name =>
if (name.startsWith("/")) name else ("/" + name)).get
if (new File(resourceName).isDirectory
|| !new File(resourceName).getCanonicalPath.startsWith(new File(path).getCanonicalPath)) {
NotFound
} else {
...
}
...
}
Кажется, что play пытается найти каталог и файл, существующие на диске, но этот каталог public
упакован в test-1.0-SANPSHOT/libs/test_2.9.1-1.0-SNAPSHOT.jar
, а не в настоящий файл.