23

Play アプリで、テスト、ローカル、および本番環境 (本番環境は Heroku) で異なるデータベースを使用したいと考えています。

application.conf私は持っています:

db.default.driver=org.postgresql.Driver 

%dev.db.default.url="jdbc:postgresql://localhost/foobar" 
%test.db.default.url="jdbc:postgresql://localhost/foobar-test" 
%prod.db.default.url=${DATABASE_URL} 

これはうまくいかないようです。play testまたはを実行するとplay run、すべての DB アクセスが次のエラーで失敗します。

 Configuration error [Missing configuration [db.default.url]] (Configuration.scala:258) 

これについていくつか質問があります。

  • db一般的に、私は Playでデータベースがどのように設定されているかについて少し混乱していdb.[DBNAME]ますdb. [DBNAME].url。機能するように見える特定の式 (たとえばdb.default.url = "jdbc:..."、オブジェクトが予期される場所に文字列が提供されたというエラーで失敗します)。

  • 他の人が、それぞれが含まれてから DB 固有の構成を含む個別prod.confの ,dev.confおよびtest.confファイルを作成することを提案しているのを見てきました。しかし、その場合、 Play コンソールからapplication.conf実行するときに使用するデータベースをどのように指定すればよいでしょうか?test

  • 構文は%envPlay 2 で動作するはずですか?

  • 使用する環境を指定する正しい方法は何play testですか?

4

5 に答える 5

21

Play 2 には異なる構成環境はありません。conf/application.conf代わりに、ファイル内の構成パラメーターを設定またはオーバーライドするだけです。これを行う 1 つの方法は、play次のようなコマンド ラインです。

play -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=$DATABASE_URL ~run

別の設定ファイルを使用するように Play に指示することもできます。

play -Dconfig.file=conf/prod.conf ~run

Heroku の Procfile の例については、
https ://github.com/jamesward/play2bars/blob/scala-anorm/Procfile を参照してください。

Play ドキュメントの詳細:
http://www.playframework.org/documentation/2.0/Configuration

于 2012-05-01T02:31:46.000 に答える
13

少なくとも Play 2.1.1 では、環境変数が設定されている場合、設定値を上書きする可能性があります。(詳細については、http ://www.playframework.com/documentation/2.1.1/ProductionConfiguration を参照してください)

したがって、次のように設定できますconf/application.conf

db.default.url="jdbc:mysql://localhost:3306/my-db-name"
db.default.url=${?DATABASE_URL_DB}

デフォルトでは、環境変数DATABASE_URL_DBで値が定義されていない限り、定義された JDBC-URL が使用されます。したがって、構成で開発データベースを設定するだけで、本番環境またはステージでは環境変数を定義できます。

ただし、引用符で囲まれた文字列内に変数参照を配置すると、この置換は機能しないことに注意してください。

db.default.url="jdbc:${?DATABASE_URL_DB}"

代わりに、たとえば、置換するセクションの引用符を外してください。

database_host = "localhost"
database_host = ${?ENV_DATABASE_HOST}
db.default.url="jdbc:mysql://"${?database_host}":3306/my-db-name"

この例では、環境変数ENV_DATABASE_HOSTが設定されていない場合、デフォルトで localhost が使用されます。(詳細については、https ://www.playframework.com/documentation/2.5.x/ConfigFile#substitutions を参照してください)

于 2013-04-27T14:11:18.527 に答える
2

Play 2 では、実際には Play 1.0 の設定値の命名方法を引き続き使用できます。設定値をロードするときに をチェックしてPlay.isTestから、ロードするプロパティの前に「test.」を付けます。ここに抜粋があります:

def configPrefix = if (play.api.Play.isTest) "test." else ""

def configStr(path: String) =
  Play.configuration.getString(configPrefix + path) getOrElse
     die(s"Config value missing: $configPrefix$path")

new RelDb(
  server = configStr("pgsql.server"),
  port = configStr("pgsql.port"),
  database = configStr("pgsql.database"),
  user = ...,
  password = ...)

関連する構成スニペット:

pgsql.server="192.168.0.123"
pgsql.port="5432"
pgsql.database="prod"
...

test.pgsql.server="192.168.0.123"
test.pgsql.port="5432"
test.pgsql.database="test"
...

これで、e2e テスト スイートを実行するときにシステム プロパティの設定を覚えておく必要がなくなり、誤って prod データベースに接続することがなくなります。

必要に応じて、test.値を別のファイルに配置して、メインの構成ファイルの最後に含めることができると思います。

于 2013-01-09T01:22:24.513 に答える
0

トピックから外れますが、12-factor-app に従っている場合、環境にちなんで名付けられた個別の構成を持つことは悪いことです:

Another aspect of config management is grouping. Sometimes apps batch config into named groups (often called “environments”) named after specific deploys, such as the development, test, and production environments in Rails. This method does not scale cleanly: as more deploys of the app are created, new environment names are necessary, such as staging or qa. As the project grows further, developers may add their own special environments like joes-staging, resulting in a combinatorial explosion of config which makes managing deploys of the app very brittle

ソース: http://12factor.net/config

于 2016-08-02T00:54:57.940 に答える
0

Global / GlobalSettings メソッドonLoadConfigをオーバーライドする別のアプローチがあり、そこから、以下のような一般的な構成と特定の環境構成を使用してアプリケーション構成をセットアップできます...

conf/application.conf --> configurations common for all environment
conf/dev/application.conf --> configurations for development environment
conf/test/application.conf --> configurations for testing environment

conf/prod/application.conf --> configurations for production environment

私のサンプル実装については、http://bit.ly/1AiZvX5を確認してください。

お役に立てれば。

于 2015-05-19T16:28:24.300 に答える