grails 2.0 - 正确使用serverURL进行生产?

时间:2012-02-08 20:33:13

标签: grails grails-2.0

Grails 2.0改变了它使用grails.serverURL进行开发和测试环境的方式(如manual中所述)。但是,对于Tomcat上的生产部署,我有几个problems与serverURL。 serverURL似乎有几种选择(生产模式):

  • (已添加)此设置只是“冒烟和镜像”,因为Tomcat和Jetty有方法可以控制应用程序的URL处理方式,直至“应用程序”级别。

  • 用它来指定服务器(在Config.groovy中指出为“TODO”)

  • 不要使用其中一个Grails贡献者指定的here,即“删除serverURL属性并让Grails相对于当前正在运行的应用程序生成网址应始终是安全的。”目前尚不清楚这是否扩展到生产(不生成电子邮件时)。

  • 使用另一种方法,即grails.app.context,Grails 2.0手册中没有记录,但在某些参考文献herehere中有描述。

您能否澄清一下对于Jetty和Tomcat(生产模式)的serverURL和app.context的正确使用?

由于

2 个答案:

答案 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更改为“/”...这样可以更轻松地镜像生产环境我

希望这可以解决问题!