2011-09-26 70 views
2

我正在部署使用Play編寫的應用程序!框架1.2.3的Heroku(雪松堆棧),我通過解析application.conf時無法讀Heroku config vars

heroku config:add DB_NAME="FOO" 

這些設置OK(通過Heroku的配置--app應用程序的名字所示)設置一些環境變量。這些是從代碼通過雙方通過

morphia.db.name=${DB_NAME} 

機制閱讀application.conf時播放()完成手動調用System.getenv和替代閱讀。這種策略在本地運行良好,但在heroku上環境變量看起來沒有被讀取,並且對heroku的推動失敗,因爲它不能取代變量。玩的警告是:

WARNING: Cannot replace DB_NAME in configuration (morphia.db.name=${DB_NAME}) 

它死了,因爲它無法連接到數據庫,這是一個致命的錯誤。它還將錯誤報告爲嘗試連接到$ {HOST}:$ {PORT},因此在此處不執行替換。我在這裏錯過了些什麼,或者這對於Play來說根本不起作用!目前在heroku上的應用程序?這應該怎麼做?

回答

4

推向Heroku會啓動您的Play應用程序的預編譯,而後者會讀取您的application.conf文件。不幸的是,Heroku的配置變量不可用在製作的時候,所以你會看到你所提到的這些警告:

WARNING: Cannot replace VALUE in configuration (key=${VALUE}) 

但是,這不應該導致推失敗。它也不會導致您的應用程序無法運行。在運行時,Play重新讀取application.conf,配置變量將會出現,並且它們的值將被替換。

在這種情況下,很難確切地說出了什麼問題。有一兩件事你可以嘗試在運行遊戲的命令,就像Heroku的做一下,看看你會得到什麼:

$ play precompile 
$ play run --http.port=5000 --%prod -Dprecompiled=true 

注意,單獨的預編譯步驟和督促框架的id是不同的,那麼,如果你只是在本地運行的應用程序像這樣:

$ play run 

您還可以使用Heroku登錄票,並且有人可以看看您的應用程序。

至少,我們需要擺脫這些WARNING消息,因爲您不是第一個注意到這一點的人。

+1

發現錯誤,結合你上面說的是:預編譯步驟在編譯時運行,無需訪問config vars,通過play-morphia模塊(mongodb + morphia)啓動到mongodb的連接。這會導致致命錯誤,並且推送被拒絕。我認爲這更多的是morphia或play-morphia的bug,並會進一步調查並提出錯誤。它不應該在編譯時連接到數據庫。 –

相關問題