我的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
答案 0 :(得分: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"
}
答案 1 :(得分:0)
您正在使用开发环境运行,因此您正在从开发设置中选择主机和端口。默认情况下,
grails run-app
使用开发环境运行应用程序。要在生产中运行它,可以使用命令grails war
构建war文件,并将其部署在servlet容器中,或使用:
grails prod run-app
有关详细信息,请参阅http://www.grails.org/Environments。