1

裏話

少しグーグルから、毎回confファイルを手動で変更せずにprodにデプロイする最良の方法は、個別のconfファイルを維持し、procfileで使用するconf-fileをオーバーライドすることであると推測しました。

私のアプローチ

2つのconfファイルを作成しました

application.conf- http://pastebin.com/BaaBuRHR

prod.conf

  include "application.conf"
  http.port=${PORT} 
  applyEvolutions.default=true 
  db.default.driver=org.postgresql.Driver 
  db.default.url=${DATABASE_URL}
  db.default.user=xxxxxxxxxxx
  db.default.password=xxxxxxxxxxxxxxxxxxxxxxx

私のProcfileは次のようになります

web: target/start ${JAVA_OPTS} -Dconfig.file=/opt/conf/prod.conf

デプロイすると、ログに次のように表示されます

Feb 03 06:34:09 psytools heroku/web.1:  Starting process with command `target/start ${JAVA_OPTS} -Dconfig.file=/conf/prod.conf` 
Feb 03 06:34:10 psytools app/web.1:  Play server process ID is 2 
Feb 03 06:34:11 psytools app/web.1:  [[37minfo[0m] application - Application has started 
Feb 03 06:34:11 psytools app/web.1:  [[37minfo[0m] play - Application started (Prod) 
Feb 03 06:34:11 psytools app/web.1:  [[37minfo[0m] play - Listening for HTTP on port 9000... 
Feb 03 06:34:11 psytools heroku/web.1:  Error R11 (Bad bind) -> Process bound to port 9000, should be 39098 (see environment variable PORT) 

明らかに、herokuはPORT envを使用するのではなく、デフォルトのポート9000を使用しようとしています。

私の質問は:

  1. これは、prod/dev環境を維持するための正しい方法ですか
  2. ポートがPORTenv変数から読み取られないのはなぜですか
  3. 以前、私がPlay:Dを始めたばかりのとき、

私のapplication.confには次の行がありました

 db.default.url="jdbc:postgresql://ec2-54#####l0k8?ssl=true&sslfactory=org.postgresql.#ssl.NonValidatingFactory"

そして私のprocファイルは

 web: target/start xxxxxx xxxxxxx xxxxxxx xxxxx -Ddb.default.url=${DATABASE_URL}

DATABASE_URLは、実際には単なる一部であることが判明しましたpostgresql://ec2-54#####l0k8。しかし、これはまだ機能していました。つまり、herokuはprocファイルからではなくconfからデータベースURLを使用していました。これは、procファイルのオーバーライドが機能しないことを意味しますか?

4

3 に答える 3

4

でProcファイルを変更します

web:target / start $ {JAVA_OPTS} -Dconfig.resource = prod.conf

于 2013-02-05T12:38:45.643 に答える
1

理想的には、1つの汎用構成ファイルがあり、構成変数を使用して動作/設定を調整します。フォアマンと「.env」ファイルを使用してローカルenv変数を構成し、「heroku config:set...」を本番環境に使用できます。

これらのガイドを参照してください。

于 2013-02-03T16:22:05.527 に答える
0

私は常に逆の順序を使用しており、それは機能します:

  • 'main'では、をapplication.conf設定しないでください。Herokuのように。アプリケーションを本番モードに設定するには、常にこのファイルを使用してください。db.default.urluserpassword-Ddb.default.url=${DATABASE_URL}
  • ファイルを作成します。conf/local_rustic_bit.confそこにインクルードapplication.confし、ローカルDBのオーバーライド設定、他のメーラー設定、他のデバッグルールなどを配置します。できれば次のように追加する必要があります.gitignoreconf/local_*.conf
  • run.shローカルマシン上に( Windowsで)ファイルを作成run.batし、そこに含まれている「ローカル」構成でplayを実行するためのコマンドを配置します。もちろんstart.sh、本番モードでローカルにアプリケーションをテストするために同じことを行うことができます/すべきです。

    #!/bin/bash
    play -Dconfig.file=/opt/conf/local_rustic.bit.conf "~run 9123"
    
  • これから./run.sh、(を介して)必要なDB設定を使用してアプリをローカルで実行できます。本番環境では、Herokuは、追加の構成を選択することなく、独自の設定でアプリケーションを実行できます。

于 2013-02-03T19:03:23.063 に答える