0

我正在尝试使用来自 GitHub 的源设置 Weceem。它需要为上传目录定义物理路径,并且对于似乎用于编写可搜索索引的目录。上传的默认设置是:

weceem.upload.dir = 'file:/var/www/weceem.org/uploads/'

我想使用 WEB-INF/resources/uploads 等相对路径来定义那些。我尝试了一种我以前用于访问具有如下相对路径的目录的方法:

  File uploadDirectory = ApplicationHolder.application.parentContext.getResource("WEB-INF/resources/uploads").file
  def absoluteUploadDirectory = uploadDirectory.absolutePath
  weceem.upload.dir = 'file:'+absoluteUploadDirectory

但是,ApplicationHolder.application 下的“parentContext”为 NULL。任何人都可以提供一个解决方案来允许我使用相对路径吗?

4

3 回答 3

3

看看你应该有的 Config.groovy(也许它被评论了)

// locations to search for config files that get merged into the main config
// config files can either be Java properties files or ConfigSlurper scripts

// "classpath:${appName}-config.properties", "classpath:${appName}-config.groovy",
grails.config.locations = [
        "file:${userHome}/.grails/${appName}-config.properties",
        "file:${userHome}/.grails/${appName}-config.groovy"
]

在部署服务器中创建 Conig 文件

"${userHome}/.grails/${appName}-config.properties"

并在该配置文件中定义您的道具(甚至不是相对路径)。

于 2012-05-17T04:20:08.063 回答
2

为了增加 Aram Arabyan 的回答,这是正确的,但缺乏解释:

Grails 应用程序没有像 PHP 应用程序那样的“本地”目录。它们应该(用于生产)部署在 servlet 容器中。该内容的位置不应被视为可写,因为它可能会在下一次部署时被清除。

简而言之:将您部署的应用程序视为已编译的二进制文件。

取而代之的是,在您的服务器上选择一个特定位置来进行上传,最好是在 Web 服务器路径之外,这样就无法直接访问它们。这就是为什么 Weceem 默认使用/var/www/weceem.org/.

如果您使用外部化配置技术配置路径,那么您可以拥有特定于服务器的路径,并在您的开发机器上包含不同的路径。

但是,在这两种情况下,您都应该使用绝对路径,或者至少是相对于已知目录的路径。

于 2012-05-17T04:43:13.063 回答
0

IE

            String base = System.properties['base.dir']     
            println "config: ${base}/web-app/config/HookConfig.grooy"
            String str = new File("${base}/web-app/config/HookConfig.groovy").text
            return new ConfigSlurper().parse(str)

或者

def grailsApplication    
private getConfig() {
            String str = grailsApplication.parentContext.getResource("config/HookConfig.groovy").file.text
            return new ConfigSlurper().parse(str)
}
于 2012-05-17T14:46:23.150 回答