Grails 2.0改变了它使用grails.serverURL进行开发和测试环境的方式(如manual中所述)。但是,对于Tomcat上的生产部署,我有几个problems与serverURL。 serverURL似乎有几种选择(生产模式):
(已添加)此设置只是“冒烟和镜像”,因为Tomcat和Jetty有方法可以控制应用程序的URL处理方式,直至“应用程序”级别。
用它来指定服务器(在Config.groovy中指出为“TODO”)
不要使用其中一个Grails贡献者指定的here,即“删除serverURL属性并让Grails相对于当前正在运行的应用程序生成网址应始终是安全的。”目前尚不清楚这是否扩展到生产(不生成电子邮件时)。
您能否澄清一下对于Jetty和Tomcat(生产模式)的serverURL和app.context的正确使用?
由于
答案 0 :(得分:17)
好问题!我只是在寻找正确的方法来获取实际的serverURL
而不需要在Config.groovy中配置它(在Grails 2.1应用程序中)。
自Grails 2.0以来,有一个名为LinkGenerator
的超级实用类,几乎可以在任何地方使用,例如在服务中:
import org.codehaus.groovy.grails.web.mapping.LinkGenerator
Class MyService {
LinkGenerator grailsLinkGenerator
String serverUrl() {
// Generate: http://localhost:8080/link-generator
grailsLinkGenerator.serverBaseURL
}
}
感谢Haki先生blogging关于此事!
答案 1 :(得分:14)
因此,grails.serverURL配置参数的基本思想是允许createLink方法在创建绝对链接时知道您想要的URL。如果没有指定grails.serverURL配置参数,它将默认为http://localhost:8080(除非指定了server.port,否则8080将是其他)...
应用程序上下文告诉Jetty / Tomcat在不同的根目录中运行应用程序。例如,指定
grails.app.context="/myApp"
将您的应用程序根目录设置为“/ myApp”。在生产模式下,应用程序上下文由Web容器处理,并忽略此指令。选择配置生产jetty或tomcat实例以在不同的上下文中运行应用程序完全取决于您的技术要求。
所以真正要考虑的是,在您的应用程序中,您是否在GSP中创建了许多绝对链接,您需要在其中定义“生产”serverURL?如果没有,那么你不需要指定它;如果你是,那么你需要指定它。
作为个人偏好,我在创建新的grails项目后首先要做的就是进入配置并将grails.app.context更改为“/”...这样可以更轻松地镜像生产环境我
希望这可以解决问题!