Grails 2.0 - правильное использование serverURL для производства? - PullRequest
20 голосов
/ 09 февраля 2012

Grails 2.0 изменился в соответствии с тем, как он использует grails.serverURL для сред разработки и тестирования (как описано в руководстве ). Однако у меня было несколько проблем с 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 (рабочий режим)?

Спасибо

Ответы [ 2 ]

17 голосов
/ 20 декабря 2012

Хороший вопрос! Я просто искал правильный способ получения фактического 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
    }
}

Спасибо мистеру Хаки за ведение блога об этом!

14 голосов
/ 20 февраля 2012

Таким образом, основная идея параметра конфигурации grails.serverURL состоит в том, чтобы позволить методу createLink знать, какой URL вы хотите при создании абсолютных ссылок. Если параметр конфигурации grails.serverURL не указан, по умолчанию он будет http://localhost:8080 (если не указан server.port, то 8080 будет любым) ...

Контекст приложения сообщает Jetty / Tomcat о запуске приложения в другом корне. Например, указав

grails.app.context="/myApp"

установит корень приложения в "/ myApp". В рабочем режиме контекст приложения обрабатывается веб-контейнером, и эта директива игнорируется. Выбор конфигурации производственных экземпляров Jetty или tomcat для запуска приложения в другом контексте полностью зависит от ваших технических требований.

Таким образом, реальная вещь, которую следует учитывать, заключается в том, что в своем приложении вы создаете много абсолютных ссылок в своих GSP, где вам нужно определить «производственный» serverURL? Если нет, то вам не нужно указывать это; если да, то вам нужно это указать.

В качестве личного предпочтения первое, что я всегда делаю после создания нового проекта grails, - это захожу в конфигурацию и меняю grails.app.context на "/" ... Это значительно упрощает зеркалирование производственной среды. я.

Надеюсь, это прояснит ситуацию!

...