2015-12-05 42 views
1

我使用Play 2.4.2與斯卡拉。玩2.4.2 Scala控制器.Assets.at行動未找到

這是我的路線文件。

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在航線開發和生產做工精細但沒有任何資產都在這些網頁返回生產。

進一步的測試顯示沒有使用controllers.Assets.at的路線在生產中工作。他們在開發過程中在我的本地機器上工作。

在生產中,如果我嘗試直接訪問資產,則會獲取默認的「未找到請求的操作」GET /assets/stylesheets/attachments.css'「。

因此,資產請求到達Play服務器。

我試過了所有我能找到的解決此問題的方法。

我懷疑這與依賴注入有關。

任何想法?

+0

如何建立生產?如果您使用'stage/dist'構建,請嘗試在'lib'文件夾中查找'your_project_name-your_version-assets.jar'。如果這個jar包含你的資源,那麼打開debug,以'testProd'運行play,轉到'play.api.controllers.AssetsBuilder'類,並調試'assetAt'方法。您提供的信息很少,無法給出準確的答案。 – MrRontgen

回答

1

一些提示,以診斷此問題:

  1. 請務必使用推薦的方式來構建應用程序:Play2.4 doc - Building with dist
  2. 檢查您target目錄,SBT在專用的罐子包裝以及您的所有資產:

當您打包應用程序時,所有資產的申請,包括所有的子項目,被合併爲一個罐子,在目標/我先APP-1.0.0-assets.jar。該jar包含在發行版中,以便您的Play應用可以爲它們提供服務。這個罐子也可以用於部署的資產,CDN或反向代理

  • 要確保你沒有錯過配置您的build.sbt,尤其是pipelineStages(嘗試新鮮項目比較 - activator new
  • 確保你沒有編輯/project文件(嘗試一個新的項目來比較)
  • 請仔細檢查你的application.conf配置assets.XXX值(除去這些配置試試)
  • 確保您的前端服務器d oes沒有陷阱你的/public請求
  • 0

    這原來是SBT插件之間的衝突。我爲較早版本的Play編寫了一個自定義插件,它不支持sbt-native-packager,實質上,它與2.4 build系統現在使用sbt-native-packager做的一樣。這場衝突阻礙了構建和打包網絡資產罐。所以我將刪除我的插件並將設置遷移到內置於Play構建工具中的等效支持。