Grails 2.0は、開発環境とテスト環境でgrails.serverURLを使用する方法が変更されました( manual で説明されています)。ただし、Tomcatでの本番デプロイメントに関して、serverURLでいくつかの 問題 が発生しました。 serverURL(本番モード)にはいくつかのオプションがあるようです。
(追加)TomcatとJettyには、アプリのURLの処理方法を「アプリ」レベルまで制御するメソッドがあるため、この設定は単なる「煙と鏡」です。
これを使用してサーバーを指定します(Config.groovyで「TODO」として指摘されているように)
Grailsの寄稿者の1人が示したように使用しないでください ここ 「serverURLプロパティを削除して、Grailsに現在実行中のアプリに関連するURLを生成させることは常に安全です。」これが本番環境にまで及ぶかどうかは明確ではありません(電子メールを生成しない場合)。
JettyとTomcat(本番モード)の両方で、serverURLとapp.contextの正しい使用法を明確にしていただけますか?
ありがとう
したがって、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を「/」に変更することです...これにより、本番環境のミラーリングがはるかに簡単になります。
これで問題が解決することを願っています!
良い質問! 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
}
}
ブログ これについてハキさんに感謝します!