2

私はGrailsのリソースプラグインが本当に好きで、Grails2.2のプロジェクトで広く使用しています。これを少し拡張して環境に対応させたいので、たとえば、実際には開発とテストにのみ必要なcertianjavascriptライブラリを本番環境にロードすることを回避できます。

Grailsのドキュメント(http://grails-plugins.github.com/grails-resources/guide/3.%20Declaring%20resources.html#3.2%20Resource%20artefacts)によると、これらの*Resources.groovyファイルは簡単なはずです。 grails-app / confフォルダーには、Groovy ConfigSlurperスクリプト(DataSource.groovyのように)が含まれているため、「environments」ブロック構文をサポートします。

私の問題は、このスタイルをドキュメンテーションが言っているように実装しようとすると、リソースプラグインを完全に壊すことができるだけだということです。IntelliJ IDEAが環境ブロックを認識しないことと相まって、これがどのように機能するのかわかりません。これが私が話していることです。ここでは、environmentsブロックがリソースインジェクション全体を破棄しています。

modules = {
    stuff {
        resource 'js/lib/script1.js'
        resource 'js/lib/script2.js'
    }
}

environments {
    production {
        stuff {
            resource 'js/lib/script1.js'
        }
    }
}

ここでは、本番環境で実行すると、特定のスクリプトを「スタッフ」リソースから明確に除外するモジュールを作成しようとしています。誰かがこれを行うための正しい方法を話すことができれば、私は大いに感謝します!前もって感謝します!

アップデート!!!

OK、私は環境に配慮したリソースを設定する正しい方法をいじって見つけたと思います。私の唯一の問題は、デフォルトのリソースをバンドルに含める方法を理解することです。これにより、環境間でこのような重複がすべて発生することはありません。次の設定があるとしましょう。

environments {
    development {
        modules = {
            stuff {
                resource 'js/script1.js'
                resource 'js/script2.js'
                resource 'js/OnlyForDevelopment.js'
            }
        }
    }
    production {
        modules = {
            stuff {
                resource 'js/script1.js'
                resource 'js/script2.js'
            }
        }
    }
}

script1とscript2を「stuff」リソースバンドルのデフォルトとして設定できるように、これを記述する適切な方法は何でしょうか。これにより、環境ブロックごとに1回ずつ、2回書き出す必要がなくなります。これはほんの小さな例ですが、環境ブロックごとにすべての共有リソースを複製する必要はありません。これに対する優雅な解決策はありますか?環境対応バージョンが追加するもののベースとなるテンプレート「スタッフ」リソースを設定できる「汎用」リソースブロックはありますか?その場合、環境対応リソースに、dependsOnステートメントを含む汎用ブロックのリソースを含めることができますか?私はこれらのことを実現しようとしましたが、無駄になりました。

4

2 に答える 2

3

dependsOn を使用して、共有モジュールを分離できます。

modules = {

    stuff {
       resource 'js/script1.js'
       resource 'js/script2.js'
    }

    devStuff {
       dependsOn 'stuff'
       resource 'js/OnlyForDevelopment.js'
    }

}

リソースファイル内に環境設定を入れないようにしています。少し魔法のように感じられ、どの環境がどこにあるのかすぐに忘れてしまいます。ちょっとしたメンテナンスの悪夢です。

代わりに、レイアウトでは、環境に基づいてモジュールを設定できます。

つまり、

<g:if env='test'>
     <r:use module='testStuff...'/> </g:if> <g:else>
     <r:use module='stuff'/> 
</g:else>

(あなたはアイデアを得る)。

于 2013-01-26T03:05:25.473 に答える