web-dev-qa-db-ja.com

grails 2.0-本番環境でserverURLを正しく使用していますか?

Grails 2.0は、開発環境とテスト環境でgrails.serverURLを使用する方法が変更されました( manual で説明されています)。ただし、Tomcatでの本番デプロイメントに関して、serverURLでいくつかの 問題 が発生しました。 serverURL(本番モード)にはいくつかのオプションがあるようです。

  • (追加)TomcatとJettyには、アプリのURLの処理方法を「アプリ」レベルまで制御するメソッドがあるため、この設定は単なる「煙と鏡」です。

  • これを使用してサーバーを指定します(Config.groovyで「TODO」として指摘されているように)

  • Grailsの寄稿者の1人が示したように使用しないでください ここ 「serverURLプロパティを削除して、Grailsに現在実行中のアプリに関連するURLを生成させることは常に安全です。」これが本番環境にまで及ぶかどうかは明確ではありません(電子メールを生成しない場合)。

  • 代わりに、別のメソッド、つまりgrails.app.contextを使用してください。これは、Grails 2.0のマニュアルには記載されていませんが、特定のリファレンス here および here で説明されています。

JettyとTomcat(本番モード)の両方で、serverURLとapp.contextの正しい使用法を明確にしていただけますか?

ありがとう

20
Ray

したがって、grails.serverURL構成パラメーターの基本的な考え方は、絶対リンクを作成するときにcreateLinkメソッドが必要なURLを認識できるようにすることです。 grails.serverURL構成パラメーターが指定されていない場合、デフォルトで http:// localhost:808 になります(server.portが指定されていない場合、8080は何でもかまいません)...

アプリケーションコンテキストは、Jetty/Tomcatにアプリケーションを別のルートで実行するように指示します。たとえば、

grails.app.context="/myApp"

アプリケーションルートを「/ myApp」に設定します。本番モードでは、アプリケーションコンテキストはWebコンテナによって処理され、このディレクティブは無視されます。別のコンテキストでアプリケーションを実行するように本番用桟橋またはTomcatインスタンスを構成するかどうかは、技術要件に完全に依存します。

したがって、考慮すべき本当のことは、アプリケーションで、「本番」serverURLを定義する必要があるGSPに多くの絶対リンクを作成しているということです。そうでない場合は、指定する必要はありません。もしそうなら、あなたはそれを指定する必要があります。

個人的な好みとして、新しいgrailsプロジェクトを作成した後、私が常に最初に行うことは、configに移動し、grails.app.contextを「/」に変更することです...これにより、本番環境のミラーリングがはるかに簡単になります。

これで問題が解決することを願っています!

14
Daniel Woods

良い質問! Config.groovy(Grails 2.1アプリケーション)で明示的に構成する必要なしに、実際のserverURLを取得する正しい方法を探していました。

Grails 2.0以降、 LinkGenerator という非常に便利なクラスがあり、サービス内など、事実上どこでも使用できます。

import org.codehaus.groovy.grails.web.mapping.LinkGenerator

Class MyService {
    LinkGenerator grailsLinkGenerator

    String serverUrl() {
        // Generate: http://localhost:8080/link-generator
        grailsLinkGenerator.serverBaseURL
    }
}

ブログ これについてハキさんに感謝します!

17
miek