2015-10-19 22 views
1

我正在開發一個項目,我必須在文件系統上保存一些臨時用戶生成的文件。在我的開發環境中,我在根文件夾中創建了一個名爲usr的文件夾,以及從文件夾讀取和寫入的用戶相對路徑。生產期間在Play框架中獲取根文件夾?

但是,當我運行生產服務器使用/.activator start。該框架試圖從root/target/universal/stage/usr中讀取。

我甚至嘗試使用Play.application.path.getPath,但我一直在獲取相同的路徑。

有沒有辦法讓生產中的根文件夾?

謝謝

回答

2

您正在收到正確的根文件夾。 start命令的意義在於驗證應用程序在生產中的運行方式。所以它構建應用程序,就像你將它推到prod時一樣。然後「將其部署到prod」 - 將其解包到target/universal/stage文件夾並從該文件夾運行應用程序。因此target/universal/stage是您正確的根文件夾。

採取立正 - 啓動命令已過時:

[提醒]開始命令已被棄用,並將在遊戲的 未來的版本中刪除。

[警告]要在生產模式下運行Play,請改爲運行 'stage',然後在 target/universal/stage/bin中執行生成的啓動腳本。

[警告]要使用 生產模式測試您的應用程序,請運行'testProd'。

更新

您需要添加到build.sbt下一個代碼

mappings in Universal ++= 
    (baseDirectory.value/"usr" * "*" get) map 
    (x => x -> ("usr/" + x.getName)) 

這樣說SBT你的 「USR」 文件夾添加到 「生產包」(第一階段) 。採取以關注 - 它不會「鏈接」,這將很難usr文件夾複製到target/universal/stage所以你必須target/universal/stage/usr那就是usr副本只是在運行命令之前start

+0

謝謝,這是我認爲這是發生。那麼你認爲在'target/universal/stage'中包含我的'usr'文件夾而不是實際的根文件夾是一個好的解決方案嗎? – danielz

+0

我認爲最好的解決方案是將文件放入數據庫。如果你想使用文件系統 - 使用你喜歡的路徑。你的問題是你想從prod模式獲取以開發模式上傳的文件,這是兩種不同的服務器環境。 –

+0

不幸的是,將文件放入數據庫不是一個選項,我需要使用文件系統。是否有跨平臺的方式來獲取實際的根文件夾路徑?我嘗試過的每種方法都給了我'目標/通用/舞臺',這從你的答案中是有道理的。但我正在尋找一種方法來獲取項目的根路徑,而無需對其進行硬編碼。 – danielz

相關問題