1

I am doing what appears to be the best practices for using an external config file in Grails.

grails.config.locations = ["classpath:${appName}-config.groovy",
                           "file:./${appName}-config.groovy"]
if (System.properties["${appName}.config.location"]) {
   grails.config.locations << "file:" + System.properties["${appName}.config.location"]
}

I put the config file in the root folder during testing and it works. And I manually put the config file in our Tomcat server's lib folder (in the classpath) during production and it worked. But I don't want to have to copy/create our external config file every time. After building a war and deploying an app, is it possible for my config file to be moved to the correct location so that I don't have to manually move it during deployment of any of my apps? Thanks.

4

2 に答える 2

0

プロジェクトでは、環境 (ローカル、開発、テスト、運用) ごとに異なる構成設定を提供する必要があります。さまざまなサーバー自体で構成ファイルを更新する手間を避けたいと考えていますが、特定の環境で構成値をすばやくオーバーライドできるようにする必要があります。

これらの要件に対応するために、「カスケード」構成ファイルの次のセットアップがあります。

  • common.properties は .war ファイルにバンドルされ、常にロードされます
  • xxx.properties ファイルは .war ファイルにバンドルされており、環境変数 (appEnv) の値に応じて、これらの構成ファイルのいずれかが読み込まれるか、まったく読み込まれません (たとえば、環境変数が yyy の場合、yyy.properties が読み込まれます)。
  • ローカル ファイル システム上の構成ファイルは、appEnv および appLibRoot 環境変数を使用して検索されます。appEnv.properties に対応する構成ファイルが見つかった場合は、最後にロードされます。

Grail アプリケーションの起動時に構成ファイルをロードするには、Config.groovy で構成ファイルの場所のリストを指定するだけです。AppEnv クラスは、appEnv および appLibRoot 環境変数を使用して構成ファイルのリストを作成し、クラスパスとファイル システムに実際に存在するファイルを確認します。

Config.groovy    
grails.config.locations = AppEnv.instance.configLocations
于 2013-04-17T06:49:04.650 に答える
0

注:質問のタイトルを編集して、自動化に関する実際の問題を反映します。

それは、既存のプロセスがどれほど手作業であるかによって異なります...

次のことを想像してみましょう。

  • Jenkins/Hudson などの継続的インテグレーション エンジンが実行されている
  • ビルドが成功したら、外部構成ファイルをscp/rsyncします
  • ビルドが成功したら、アプリケーションをサーバーにデプロイします ( projectName/scripts -> Tomcat、JBoss、Websphere などの下に gant deploy スクリプトがあると仮定します)。
于 2013-04-16T21:49:48.763 に答える