未找到播放2.4.2 Scala Controller.Assets.at操作

未找到播放2.4.2 Scala Controller.Assets.at操作,scala,playframework,playframework-2.0,playframework-2.4,Scala,Playframework,Playframework 2.0,Playframework 2.4,我将Play2.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 / controller

我将Play2.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:=注入式路由生成器

/,/:id,/path/:id路由在开发和生产中运行良好,但是这些页面上的任何资产都不会在生产中返回

进一步的测试显示,生产中没有使用controller.Assets.at的路由。在开发过程中,他们在我的本地机器上工作

在生产环境中,如果我试图直接访问资产,我会得到默认的“未找到请求'get/assets/stylesheets/attachments.css'的操作”

因此,对资产的请求正在到达Play服务器

我已经尽我所能解决这个问题

我怀疑这与依赖注入有关


有什么想法吗?

诊断此问题的一些提示:

  • 请确保使用推荐的方法构建应用程序:
  • 检查您的
    target
    目录中,sbt是否将您的所有资产都打包在一个专用的jar中:
  • 打包应用程序时,应用程序的所有资产(包括所有子项目)都聚合到一个jar中,位于target/my-first-app-1.0.0-assets.jar中。这个jar包含在发行版中,因此您的Play应用程序可以为其提供服务。此jar还可用于将资产部署到CDN或反向代理

  • 确保您没有错过配置的
    build.sbt
    ,尤其是
    pipelineStages
    (尝试一个新项目来比较-
    activator new
  • 确保未编辑
    /project
    文件(请尝试新项目进行比较)
  • 仔细检查
    application.conf
    中的配置,查看
    assets.XXX
    值(删除这些配置以重试)
  • 确保前端服务器不会捕获您的
    /public
    请求

  • 这是SBT插件之间的冲突。我为旧版本的Play编写了一个自定义插件,该插件不支持sbt native packager,基本上与2.4构建系统现在使用sbt native packager所做的相同。冲突阻碍了dist构建和打包web资产jar。因此,我正在删除我的插件,并将设置迁移到Play build tools中内置的等效支持。

    如何构建产品?如果使用
    stage/dist
    build,请尝试在
    lib
    文件夹中查找
    your_project\u name-your_version-assets.jar
    。如果此jar包含您的资产,则打开调试,以
    testProd
    的身份运行play,转到
    play.api.controllers.AssetBuilder
    类,然后调试
    assetAt
    方法。您提供的信息很少,无法给出准确的答案。