Подтвердить что ты не робот

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 (режим производства)?

Спасибо

4b9b3361

Ответ 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 об этом!