如何在Config.groovy中派生相对目录的物理路径?

时间:2012-05-17 02:31:26

标签: grails groovy

我正在尝试使用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。任何人都可以提供一个解决方案来允许我使用相对路径吗?

3 个答案:

答案 0 :(得分: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"

在该配置文件中定义你的prop(甚至不是相对路径)。

答案 1 :(得分:2)

要添加Aram Arabyan的回复,这是正确的,但缺乏解释:

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

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

相反,请在服务器上的某个位置选择要上传的特定位置,最好是在Web服务器的路径之外,这样就无法直接访问它们。这就是为什么Weceem默认使用/var/www/weceem.org/下的自定义文件夹。

如果使用externalized configuration技术配置路径,则可以拥有特定于服务器的路径,并在开发计算机上包含不同的路径。

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

答案 2 :(得分:0)

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