2

我的 Grails 配置文件中有三个环境块,类似于:

environments {
    production {
        grails.serverURL = "https://www.mysite.com"
    }
    development {
        grails.serverURL = "http://localhost:8080/${appName}"
    }
    test {
        grails.serverURL = "http://localhost:8080/${appName}"
    }
}

... // more code

environments {
    production {
        authnet.apiId = "123456"
        authnet.testAccount = "false"
    }
    development {
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    test {
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
}

... // more code

environments {
    production {
        email.sales = 'sales@mysite.com'
    }
    development {
        email.sales = 'test@mysite.com'
    }
    test {
        email.sales = 'test@mysite.com'
    }
}

在控制器的某处:

println grailsApplication.config.grails.serverURL
println grailsApplication.config.authnet.apiId
println grailsApplication.config.email.sales

它打印出来:

http://localhost:8080/myapp
[:]
test@mysite.com

因此,由于某种原因,该应用程序无法从某些环境块中获取数据。环境块之外的东西很好。我注意到这个问题与几个不同的应用程序、不同的配置等有关。尝试使用 grailsApplication 和 ConfigurationHolder 来获取它。是 Grails 错误还是我做错了什么?我正在运行 Grails 1.3.6

4

2 回答 2

4

您多次重新定义配置信息。由于您编写的 groovy 代码会被执行而不是 XML 配置,因此您的更改不会自动合并,因此多个配置块会相互覆盖。您需要在一个块中定义所有内容,例如

environments {
    development {
        grails.serverURL = "http://localhost:8080/${appName}"
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    test {
        grails.serverURL = "http://localhost:8080/${appName}"
        authnet.apiId = "654321"
        authnet.testAccount = "true"
    }
    production {
        grails.serverURL = "https://www.mysite.com"
        authnet.apiId = "123456"
        authnet.testAccount = "false"
        }
于 2011-07-19T16:59:34.743 回答
0

您正在使用开发环境运行,因此您从开发设置中选择主机和端口。默认情况下,

grails run-app

使用开发环境运行应用程序。要在生产环境中运行它,可以使用命令构建一个 war 文件grails war,并将其部署在 servlet 容器中,或者使用:

grails prod run-app

有关详细信息,请参阅http://www.grails.org/Environments

于 2011-07-19T18:17:26.147 回答