Специфичная для среды web.xml в граалях? - PullRequest
9 голосов
/ 04 мая 2011

Каков наилучший способ создания специфичных для окружающей среды записей web.xml в Grails?

Мне нужно внести некоторые изменения только для производства, поскольку они перестают работать локально.

Есть мысли?

Ответы [ 3 ]

15 голосов
/ 05 мая 2011

Вы можете создать scripts/_Events.groovy с помощью обработчика событий для события 'WebXmlEnd', которое запускается, когда Grails и плагины завершают вносить свои изменения. Обновите XML с помощью простого поиска / замены или с помощью методов DOM, проанализировав XML, и запишите обновленный файл:

import grails.util.Environment

eventWebXmlEnd = { String filename ->

   if (Environment.current != Environment.PRODUCTION) {
      return
   }

   String content = webXmlFile.text

   // update the XML
   content = ...

   webXmlFile.withWriter { file -> file << content }
}
8 голосов
/ 20 июня 2011

Вот решение, которое я использую, от парня из death-head.ch

, сначала установите шаблоны

grails install-templates

, затем настройте web.xml, который вы будетенайти в src/templates/war/web.xml.Я решил сделать web_dev.xml и web_prod.xml и удалить web.xml.Я хотел, чтобы web_prod.xml содержал блок ограничения безопасности.в любом случае ...

Поместите в BuildConfig.groovy следующее:

// #########################################################
// ## Can't use environment switching block because BuildConfig doesn't support it.
// ##    @url http://jira.grails.org/browse/GRAILS-4260
// ## So use this workaround:
// ##   @url http://death-head.ch/blog/2010/09/finally-solved-the-base-authentication-in-grails/
// #########################################################

switch ("${System.getProperty('grails.env')}") {
  case "development":
    if (new File("/${basedir}/src/templates/war/web_dev.xml").exists()) {
        grails.config.base.webXml = "file:${basedir}/src/templates/war/web_dev.xml"
    }
    break;
  default:
    if (new File("/${basedir}/src/templates/war/web_prod.xml").exists()) {
        grails.config.base.webXml = "file:${basedir}/src/templates/war/web_prod.xml"
    }
    break;
}

Удачи!

0 голосов
/ 05 мая 2011

Я никогда не пробовал, но должно иметь возможность указать параметр grails.config.base.webXml в BuildConfig.groovy в зависимости от текущей среды.

Есть список из доступных настроек BuildConfig здесь


РЕДАКТИРОВАТЬ

На самом деле, из-за этой проблемы , это не путь вперед :-( Возможно, прохождениесвойство как:

grails -Dgrails.config.base.webXml=/path/to/web.xml

Все ли это возможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...