2012-02-08 2 views
19

Grails 2.0 изменен так, как он использует grails.serverURL для среды разработки и тестирования (как описано в разделе manual). Тем не менее, у меня было несколько problems с serverURL в отношении производственного развертывания на Tomcat. Там, кажется, несколько вариантов (режим производства) ServerURL:grails 2.0 - правильное использование сервераURL для производства?

  • (Добавлено) этот параметр является просто «дым и зеркала», так как Tomcat и Jetty есть методы управления, как URL обрабатывается для приложения, вплоть до уровня «App».

  • С его помощью можно указать сервер (как указывается в качестве «TODO» в Config.groovy)

  • Не используйте его, как указано here одним из Grails участников, т.е. «Это должно всегда быть в безопасности, чтобы удалить свойство serverURL и позволить Grails генерировать URL-адреса относительно текущего запущенного приложения ». Неясно, распространяется ли это на производство или нет (когда не создается электронная почта).

  • Используйте другой метод, а именно grails.app.context, который не документирован в руководстве Grails 2.0, но описан в некоторых ссылках, here и here.

Не могли бы вы пояснить правильное использование serverURL и app.context, как для Jetty, так и для Tomcat (режим производства)?

Благодаря

ответ

14

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

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

grails.app.context="/myApp" 

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

Итак, в вашем приложении вы создаете много абсолютных ссылок в своих GSP, где вам нужно определить «production» serverURL? Если нет, то вам не нужно указывать его; если да, то вам нужно указать его.

Как личное предпочтение, первое, что я всегда делаю после создания нового проекта Grails, входит в конфигурацию и меняет grails.app.context на «/» ... Это упрощает зеркалирование производственной среды для меня.

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

+0

Спасибо за подробный ответ. Отдельный, но связанный, у меня было много проблем с использованием UrlMapping простым способом, например. для доступа к странице html через спецификацию URI. Я создаю что-то вроде: «/ test2» (uri: «/test2.html»), но тогда grails не находит файл test2.html, даже если он находится в верхней части веб-приложения или каталога представлений. Вы знаете, как использовать это сопоставление? – Ray

+0

... У меня сейчас это работает - URI. Не знаю, почему он никогда не работал раньше, но, похоже, теперь находит файл. – Ray

+0

Это было очень полезно для поддержания совместимости между производством и развитием. Благодаря! – haventchecked

17

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

Смежные вопросы