20

Grails 2.0 改变了它使用 grails.serverURL 开发和测试环境的方式(如手册中所述)。但是,关于 Tomcat 上的生产部署,我在serverURL 方面遇到了一些问题。serverURL(生产模式)似乎有几个选项:

  • (已添加)此设置只是“烟雾和镜像”,因为 Tomcat 和 Jetty 具有控制如何为 App 处理 URL 的方法,直至“App”级别。

  • 使用它来指定服务器(正如 Config.groovy 中的“TODO”所指出的那样)

  • 不要像 Grails 贡献者之一所说的那样使用它即“删除 serverURL 属性并让 Grails 生成相对于当前正在运行的应用程序的 url 应该始终是安全的。” 目前尚不清楚这是否扩展到生产(当不生成电子邮件时)。

  • 改用另一种方法,即 grails.app.context,它在 Grails 2.0 手册中没有记录,但在某些参考资料中有所描述,herehere

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

谢谢

4

2 回答 2

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 先生为此写博客

于 2012-12-20T09:02:39.947 回答
14

所以 grails.serverURL 配置参数的基本思想是让 createLink 方法在创建绝对链接时知道你想要什么 URL。如果没有指定 grails.serverURL 配置参数,它将默认为http://localhost:8080(除非指定了 server.port,那么 8080 将是什么)...

应用程序上下文告诉 Jetty/Tomcat 在不同的根目录中运行应用程序。例如,指定

grails.app.context="/myApp"

将您的应用程序根设置为“/myApp”。在生产模式下,应用程序上下文由 Web 容器处理,该指令被忽略。选择配置生产 jetty 或 tomcat 实例以在不同的上下文中运行您的应用程序完全取决于您的技术要求。

所以真正要考虑的是,在您的应用程序中,您是否在您的 GSP 中创建了很多绝对链接,您需要在其中定义“生产”服务器 URL?如果没有,那么您不需要指定它;如果是,那么您需要指定它。

作为个人喜好,我在创建一个新的 grails 项目后总是做的第一件事是进入配置并将 grails.app.context 更改为“/”......它使镜像生产环境对我来说更容易。

希望这可以解决问题!

于 2012-02-20T18:16:28.987 回答