0

因此,我尝试使用 GetResource 来引用战争中打包的文件,作为我的 grails 应用程序的一部分,使用:

grailsApplication.mainContext.getResource) 

奇怪的是,如果我在 OSX 上使用“grails test war”构建它,它可以在 Elastic Beanstalk(Tomcat 7 32 位)上运行。但是,当 CI 服务器(在 Linux EC2 实例上运行的 TeamCity)使用相同的命令构建和部署它时,永远找不到资源。

我看过很多文章谈论某些环境如何无法解开战争,但我认为这不是问题,因为这是两个不同的战争被发送到相同的环境。一场战争有效,另一场无效

我检查过的事情:1)war文件的大小几乎相同,并且都在WEB-INF中有文件2)两台机器上的Java版本相似(JDK 1.6)3)我使用的是相同的版本两个(2.0.4)上的grails 4)我在两个上都使用相同的命令(grails test war)5)代码是相同的(都来自同一个git repo)

有什么想法吗?我读过我可以使用 GetResourceAsStream 但我正在使用一个回复物理文件的电子邮件插件。我每次都可以将流写入文件,但这并不是什么好选择。

任何人?

4

1 回答 1

1

Grails 有一个 bean,称为grailsResourceLocator. 这将适用于开发和部署环境。例子:

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)
    }
}

这个例子取自这里

于 2013-10-26T01:10:25.880 回答