Странность с ресурсами в WEB-INF

Поэтому я пытаюсь использовать GetResource для ссылки на файл, упакованный на войне, как часть моего приложения grails, используя:

grailsApplication.mainContext.getResource)

Странно, что это работает на Elastic Beanstalk (Tomcat 7 32 bit), если я построю его, используя "войну Grails" на OSX. Но когда он был построен и развернут сервером CI (TeamCity, работающим на экземпляре Linux EC2) с той же командой, ресурс никогда не будет найден.

Я видел много статей о том, как некоторые среды не будут распаковывать войну, но я не думаю, что это проблема, потому что это две разные войны, отправленные в ЗДОРОВЬЮ среду. Одна война работает, другая - нет

Вещи, которые я проверил: 1) Файлы войны имеют почти одинаковый размер, и оба имеют файлы в WEB-INF 2). Версии Java одинаковы на обеих машинах (JDK 1.6). 3) Я использую ту же версию of grails на обоих (2.0.4) 4) Я использую ту же команду для обеих команд (grails test war) 5) Код тот же (оба происходят из одного и того же git-репо)

Есть предположения? Я читал, что могу использовать GetResourceAsStream, но я использую плагин электронной почты, который отвечает на физические файлы. Я мог писать поток в файл каждый раз, но это не так много вариантов.

Кто угодно?

1 ответ

У Grails есть компонент для этого, называемый grailsResourceLocator. Это будет работать как в dev, так и в развернутых средах. Пример:

package com.mrhaki.templates

import groovy.text.SimpleTemplateEngine

class MessageService {

 def grailsResourceLocator

 String template

 String followUpMessage(final String user, final String subject) {
 final Resource template = grailsResourceLocator.findResourceForURI(template)
 final Map binding = [user: user, subject: subject]
 final SimpleTemplateEngine templateEngine = new SimpleTemplateEngine()
 templateEngine.createTemplate(template.URL).make(binding)
 }
}

Этот пример был взят отсюда.

licensed under cc by-sa 3.0 with attribution.