2

少数のコントローラーとビュー、および非常に多数のサービスを備えたかなり大きな Grails アプリケーションがあります。

ここで、独自のビューとコントローラーのセット (コントローラーの動作に若干の違いがあります) を持つ同じサイトの「スキンを変更した」バージョンを構築する必要がありますが、サービスのセットはまったく同じです。1 つのオプションは、カスタム Grails プラグインを介してすべてのサービスをある種の共通の場所に移動することですが、別の方法があるかどうか疑問に思っています。

私がやりたいのは、コントローラー フォルダーに com.company.sitea と com.company.siteb の 2 つのパッケージを配置し、どちらを使用するかを効果的に選択する環境変数を用意することです。同様に、この環境変数に基づいて選択された 2 つの異なるビュー セットがありますが、taglib は共有されています。

これを行った明らかなものを見つけることができませんでした.プラグインまたはこれを行う標準的な方法(または同様のもの)はありますか? アイデアは、1 つのコードベースがあり、1 つの war を構築しますが、war は 2 つの異なる場所に展開され、それぞれが特別な環境変数の値を指定するというものです。

4

2 に答える 2

3

最初のアプリケーションをプラグインにするパターンを使用して成功しています。最初のユース ケースではアプリケーションとして実行され、2 番目のユース ケースではプラグインとして含まれます。

これを行う場合 (grails アプリケーションは同時にアプリケーションであると同時にプラグインでもあります)、プラグインをアプリケーションとして実行するときに、プラグインを起動から除外する必要があります。そうしないと、アプリケーションはそれをアプリケーションとして、およびプラグインとして 2 回開始します。「grails.plugin.excludes」構成設定 (ここで説明) により、これが発生しなくなります。

この特別なユース ケースについては、この jira の問題で説明しています : http://jira.grails.org/browse/GRAILS-6751

これは、多くの場合、私たちにとってキラー機能であることが判明しました。他のユースケースでアプリケーションをプラグインとして再利用し、この機能を使用していくつかの個別のアプリケーションを 1 つに組み合わせることができました。もちろん、いくつかの制限 (名前の競合など) はありますが、それは私たちにとって問題ではありませんでした。

最も一般的な使用例は、完全なアプリケーションを再利用し、別のアプリケーションのビューを単にオーバーライドすることです。既存のアプリケーションは同時にアプリケーションとプラグインになることができるため、「共通部分」を別のプラグインに抽出するための余分な作業はありません。

既存の Grails アプリケーションをプラグインにするには、MyAppNameGrailsPlugin.groovy ファイルをルート ディレクトリに追加し、この設定値を grails-app/conf/Config.groovy に追加するだけです: grails.plugin.excludes = ['myAppName'] (小文字で始まるキャメルケースのアプリケーション名)

メーリング リストのディスカッション: http://grails.1312388.n4.nabble.com/Dynamic-applications-extending-an-existing-application-with-Grails-tp4634094p4634202.html

Burt の詳細なブログ投稿: http://burtbeckwith.com/blog/?p=1973

David Dawson のプレゼンテーション: http://skillsmatter.com/podcast/home/large-scale-grails-using-plugins-how-to-modularise-an-application/jd-8012

于 2013-10-11T03:12:06.717 に答える
0

重要な要素の 1 つは、これらのバージョンの両方が同じデータを操作する必要があるかどうかです。同じデータベース上で異なるフロントエンドになるのでしょうか? それとも、顧客ごとの展開など、完全に分離されますか?

最初の場合、私はWebサービスの方法に行くので、1つのアプリにはビジネスロジックが含まれ、コントローラーはWebサービスとして機能し、他のアプリには別のコントローラーがあり、最初のコントローラーと「対話」します

すべてを 1 つのプロジェクト (両方のバージョン) に結合し、apache アンマウントを使用して、異なるドメインからの異なるコントローラーへのアクセスを制限することもできます。

後者の場合、共通部分をプラグインに抽出することも試みます

于 2013-10-09T21:00:46.133 に答える