2015-10-22 53 views
0

我有一個Web應用程序打包爲部署到Liberty容器中的Bluemix的war文件。應用程序將配置信息存儲在Web應用程序文件夾外的目錄集合中,並且在初始安裝期間將默認文件複製到該位置。當我將它作爲一個簡單的默認war文件進行部署時,出現將默認文件複製到此位置的錯誤。由於Liberty默認不會擴展戰爭文件,因此我將戰爭分解爲一個目錄(defaultServer/apps/idmu.war),並使用服務器目錄部署:https://www.ng.bluemix.net/docs/starters/liberty/index.html#optionsforpushinglibertyapplications__ServerDirectory將Bluemix Liberty Web應用程序的配置數據放在何處

使用server.xml的

<server> 
    <featureManager> 
     <feature>jsp-2.3</feature> 
    </featureManager> 
    <httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="8080" /> 
    <application name="idmu" context-root="/" type="war" location="idmu.war"/> 
</server> 

使用以下命令重新發布該應用程序

cf push idmu -p defaultServer 

應用程序重新啓動,我仍然得到文件複製錯誤之後,所以我懷疑它的目標目錄,導致問題的權限。任何幫助找到這個目錄的位置,以及如何設置權限是非常感謝。

+0

你在哪裏試圖複製這些文件?您應該在/ home/vcap /這是您的buildpack容器的主目錄下擁有寫權限。例如,/ wlp位於/ home/vcap/app/wlp –

+0

非常感謝。有了這個改變,我現在可以複製文件,但我需要編輯內容來描述環境。此外,該目錄似乎是暫時的(即,應用程序重新啓動時它將消失) - 存儲基於文件的持久數據的正確位置在哪裏以及如何在部署過程中編輯或上載這些文件? –

+0

評論轉移到答案,因爲它似乎幫助你。 –

回答

1

您應該在/ home/vcap /它是您的buildpack容器的主目錄的寫入權限。例如,/ wlp位於/ home/vcap/app/wlp。

作爲一個概念,Cloud Foundry(so Bluemix)是暫時的。它專爲雲原生應用程序而設計,因此如果您需要持久存儲,您應該需要諸如Object Store之類的服務或目錄中的其他選項來堅持這些信息。一些想法:http://12factor.net/config

您可以在開發模式下啓動Liberty Buildpack:https://developer.ibm.com/bluemix/2015/06/16/liberty-buildpack-app-management-support/因此您可以訪問shell,但不確定是否可以編輯。正如我上面評論的那樣,這不是一個好主意,因爲文件系統是暫時的。

另一種解決方案是先將這些文件編輯好,然後將它們作爲完整應用程序的一部分進行部署。

+0

我認爲最好的答案是做預配置,以便它在推送時在應用程序中。其他任何東西都不可靠。 PaaS可以隨時移動事物,即使您先執行此操作,但由於其他原因(而不是重新啓動或部署新應用程序),PaaS可能會被抹去。 – Alasdair

+0

因此,任何人都可以推薦基於文件系統的持久性服務,應用程序有少量的狀態信息存儲在文本文件集合中,這些文本文件需要在應用程序的運行之間持續存在。我真的不想重寫任何代碼來將其更改爲數據庫或其他結構化數據存儲。 –

+0

我安裝了一些類似於前段時間在Bluemix中使用虛擬機支持(注意目前在Beta版中),但從我的角度來看它太棘手:http://stackoverflow.com/questions/30470112/issues-trying-to- use-fuse-on-bluemix我會使用Object Store之類的東西,儘管同意,這需要更改代碼。 –

相關問題