2

Sup,Play框架Scala環境變量未找到

我試圖在Play2.4 Scala中爲我的項目設置環境變量。 我在Intellij的運行配置中設置了變量。

什麼是惱人的斯卡拉似乎並沒有看到這些。

我一直在收到錯誤的配置沒有指定的密鑰我用env變量。

enter image description here

bug1

bug2

當我開始應用這些節目在控制檯:

"C:\Program Files\Java\jdk1.8.0_25\bin\java" -Dfile.encoding=UTF8 -DMAIL_PORT=587 -DDB_URI=mongodb://uri -Djline.terminal=none -Dsbt.log.noformat=true -Dsbt.global.base=C:\Users\Haito\AppData\Local\Temp\sbt-global-plugin7stub -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -classpath C:\Users\Haito\.IntelliJIdea14\config\plugins\Scala\launcher\sbt-launch.jar xsbt.boot.Boot "project root" ~run 

和配置文件:

mongodb.uri = ${?DB_URI} 

play.mailer { 
    host=${?MAIL_HOST} 
    port=${?MAIL_PORT} 
    ssl=false 
    tls=true 
    user=${?MAIL_USERNAME} 
    password=${?MAIL_PASSWD} 
    debug=false 
    mock=false 
} 

,我不斷得到那些:

Missing configuration key 'mongodb.db'! 

當然,我的問題是不是我的蒙戈驅動程序。我的問題是,配置沒有被饋入環境變量。郵件程序也使用環境變量進行配置。當我粘貼除${?DB_URI}之外的實際URI時就可以使用。

體形:

resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases" 

resolvers += "Sonatype Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" 

libraryDependencies ++= Seq(
    "org.reactivemongo" %% "play2-reactivemongo" % "0.11.2.play24" 
) 

libraryDependencies ++= Seq(
    "com.typesafe.play" %% "play-mailer" % "3.0.1" 
) 
+0

你真的在配置中缺少'mongodb.db'。將其設置爲服務器上相應數據庫的名稱,例如'mongodb.db = test' – Odomontois

+0

該信息在uri中編碼。 – Haito

+0

@Hallo您是否嘗試將其與URL分開?驅動程序可能需要在獨立選項 – Odomontois

回答

0

當我開始應用這些節目在控制檯:

"C:\Program Files\Java\jdk1.8.0_25\bin\java" -Dfile.encoding=UTF8 -DMAIL_PORT=587 -DDB_URI=mongodb://uri -Djline.terminal=none -Dsbt.log.noformat=true -Dsbt.global.base=C:\Users\Haito\AppData\Local\Temp\sbt-global-plugin7stub -Xms512M -Xmx1024M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M -classpath C:\Users\Haito\.IntelliJIdea14\config\plugins\Scala\launcher\sbt-launch.jar xsbt.boot.Boot "project root" ~run 

-D沒有設置環境變量,它集JVM system properties。您應該也可以從運行配置中設置環境變量,但是該對話框的另一部分。

而且,玩的文檔不說,它看起來在環境變量都:

As well as the application.conf file, configuration comes from a couple of other places.

默認設置從classpath中找到的任何reference.conf文件加載。大多數播放JAR包含帶默認設置的reference.conf文件。 application.conf中的設置將覆蓋reference.conf文件中的設置。

也可以使用系統屬性設置配置。系統屬性覆蓋application.conf設置。

I.e.應該通過-Dmongodb.uri=...工作。

後來它說

對於未在配置樹找到替代,實現可以嘗試通過查看系統環境變量或配置的其他外部資源解決這些問題。 (在後面的章節對環境變量的更多細節。)

但是這僅僅是從HOCON README報價。

您需要查看加載配置的代碼以檢查它是否使用了包含環境變量的方法之一。

+0

這解釋了很多。但我已經使用「環境變量」框。 – Haito

+0

它看起來應該可以工作。您可以嘗試通過調用['System.getenv']來檢查程序是否可以看到這些環境變量(https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getenv- java.lang.String-) –

+0

不幸的是,sys.env和System.getenv不會返回我在runco​​nfig中創建的變量。 – Haito

2

這是一個bug in IntelliJ。在「播放運行配置」中設置「環境變量」字段會設置系統屬性,而不是環境變量。

如果配置環境變量手動地方,比如.bash_profile,那麼你當然可以使用他們在您的application.conf這樣的:

db.default.url = ${?DB_URL} 
0

如果您的MongoDB的網址中包含的參數,如mongodb://xxxxxxxxxx?key=value然後會的IntelliJ默默地刪除環境變量。