Grails 2.0 - правильное использование сервераURL для производства?
Grails 2.0 изменился так, как он использует grails.serverURL для среды разработки и тестирования (как описано в manual). Тем не менее, у меня было несколько проблем с serverURL в отношении производственного развертывания на Tomcat. Кажется, есть несколько вариантов для serverURL (режим производства):
-
(добавлено) этот параметр является просто "дымом и зеркалами", потому что Tomcat и Jetty имеют методы контроля за тем, как URL-адрес обрабатывается для приложения, вплоть до уровня "App".
-
Используйте его для указания сервера (как указано в "TODO" в Config.groovy)
-
Не используйте его, как указано здесь одним из участников Grails, то есть "Всегда должно быть безопасно удалить свойство serverURL и позволить Grails генерировать URL-адреса относительно текущего приложения". Неясно, распространяется ли это на производство или нет (когда не создается электронная почта).
- Вместо этого используйте другой метод: grails.app.context, который не документирован в руководстве Grails 2.0, но описан в некоторых ссылках, здесь и здесь.
Можете ли вы прояснить правильное использование serverURL и app.context, как для Jetty, так и для Tomcat (режим производства)?
Спасибо
Ответы
Ответ 1
Итак, основная идея параметра конфигурации grails.serverURL заключается в том, чтобы позволить методу createLink знать, какой URL-адрес вы хотите создать при создании абсолютных ссылок. Если параметр конфигурации grails.serverURL не задан, по умолчанию будет http://localhost:8080 (если не указан сервер .port, то 8080 будет любым)...
Контекст приложения сообщает Jetty/Tomcat запускать приложение в другом корне. Например, указав
grails.app.context="/myApp"
установит корень приложения в "/myApp". В режиме производства контекст приложения обрабатывается веб-контейнером, и эта директива игнорируется. Выбор для настройки экземпляра вашего причала или tomcat для запуска вашего приложения в другом контексте полностью зависит от ваших технических требований.
Итак, реальная вещь для рассмотрения заключается в том, что в вашем приложении вы создаете множество абсолютных ссылок в своих GSP, где вам нужно определить "production" serverURL? Если нет, то вам не нужно указывать его; если да, то вам нужно указать его.
Как личное предпочтение, первое, что я всегда делаю после создания нового проекта Grails, входит в конфигурацию и меняет grails.app.context на "/"... Это облегчает зеркалирование производственной среды для я.
Надеюсь, что это очистит все!
Ответ 2
Хороший вопрос! Я просто искал правильный способ получить фактический serverURL
, явно не требуя его настройки в Config.groovy(в приложении Grails 2.1).
Начиная с 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
}
}
Спасибо г-ну Хаки за blogging об этом!