我正在使用Play 2.4.2和Scala。
这是我的路线档案。
GET /favicon.ico controllers.Assets.at(path="/public", file="images/favicon.png")
GET /robots.txt controllers.Assets.at(path="/public", file="files/robots.txt")
GET / controllers.Default.redirect(to = "http://www.marketingpage.local")
GET /assets/*file controllers.Assets.at(path="/public", file)
GET /:id controllers.XController.method0(id: String)
GET /path/:id controllers.XController.method1(id: String)
我正在使用注入的路由生成器。这是在我的构建中。
routesGenerator:= InjectedRoutesGenerator,
/,/:id,/ path /:id路由在开发和生产中运行良好,但在这些页面上没有任何资产在生产中返回。
进一步测试显示没有使用控制器的路由.Assets.at在生产中工作。它们在开发过程中可以在我的本地机器上运行。
在生产中,如果我尝试直接访问资产,我会得到默认的“找不到请求的动作”GET /assets/stylesheets/attachments.css'“。
因此资产请求到达Play服务器。
我已经尝试了所有可以解决此问题的方法。
我怀疑这与依赖注入有关。
有什么想法吗?
答案 0 :(得分:1)
诊断此问题的一些提示:
target
目录中的sbt是否已将所有资产打包在一个专用的jar中:打包应用程序时,应用程序的所有资产(包括所有子项目)都会聚合到target / my-first-app-1.0.0-assets.jar中的单个jar中。此jar包含在发行版中,以便您的Play应用程序可以为它们提供服务。此jar还可用于将资产部署到CDN或反向代理
build.sbt
,尤其是pipelineStages
(尝试一个新项目进行比较 - activator new
)/project
个文件(尝试新的项目进行比较)application.conf
中仔细检查您的assets.XXX
值配置(删除这些配置以尝试)/public
请求答案 1 :(得分:0)
这结果是SBT插件之间的冲突。我为旧版本的Play编写了一个自定义插件,该插件不支持sbt-native-packager,实际上,它与2.4 build系统现在使用sbt-native-packager做了同样的事情。冲突阻止了dist建立和打包网络资产罐。所以我删除了我的插件并将设置迁移到Play构建工具内置的等效支持。