Grails:如何从生产URL中删除AppName

时间:2014-05-19 00:50:58

标签: grails tomcat7 reverse-proxy grails-2.2

我正在尝试将Grails 2.2.3项目部署到生产中并遇到URL问题。 我在Apache中设置了反向代理,并以http://example.com为例。

我在Config.groovy中设置了以下属性:

grails.serverURL = "http://example.com/"

并设置在以下application.properties

app.context=/

但是,我的所有资源和链接始终引用

http://example.com/AppName/...

如何从资源和链接引用中删除应用程序名称(" AppName")?

资源示例:

<r:require modules="bootstrap"/>
<g:javascript library="jquery"/>

环境示例Config.groovy:

environments {
    development {
        grails.logging.jul.usebridge = true
    }
    production {
        grails.logging.jul.usebridge = false

        grails.serverURL = "http://example.com/"
        grails.app.context = "/"
    }
}

我认为Grails应用程序必须具有某种可以设置的属性!?否则它似乎是一个痛苦的脖子。

请帮忙!

P.S:如果我直接访问任何资源(从URL手动删除AppName),我会得到正确的东西,如css,js和image。

更新 我在application.properties中设置了以下内容:

app.context=/
serverURL=http://example.com/

并在grails中创建了绝对URL:

<g:createLink controller="Sample" absolute="true"/>

并创建正确的URL!但是资源使用相对路径并从AppName / ...开始。这似乎是一个诅咒,我只是无法摆脱该AppName。

更新 如果我运行prod run-app,那么所有网址都会正确显示,但是当我部署到Tomcat 7时,AppName会再次显示在URL中。

2 个答案:

答案 0 :(得分:0)

还有其他选择,但最简单的方法可能是像ROOT.war一样部署它。

只需更改 BuildConfig.groovy 中的默认war文件名:

 grails.project.war.file = "target/ROOT.war"

为您设置正确的 grails.serverURL 属性,您已完成。

希望它有所帮助。

答案 1 :(得分:-2)

这是您继承的应用程序吗?如果是这样,我建议咨询原始创建者,看看他是如何为您的架构配置的。