0

我在 Heroku 上使用 Grails 堆栈来部署应用程序。我希望能够以 root 为我的应用程序提供服务,myapp.herokuapp.com/xyz而不是myapp.herokuapp.com,就像我能够从localhost:8080/xyz开发中的 root 提供服务一样。我试过grails.app.context像这样在 Config.groovy 中添加一个:

environments {
    production {
            grails.app.context = "/xyz"
    }
}

但它似乎对部署没有影响。我必须用 Heroku 配置一些东西吗?有任何想法吗?

4

2 回答 2

1

看起来您必须将jetty-web.xml文件添加到WEB-INF目录才能设置上下文路径:

<?xml version="1.0" encoding="UTF-8"?>
<!-- File: web-app/WEB-INF/jetty-web.xml -->
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
    <Set name="contextPath">/xyz</Set>
</Configure>

如果这有帮助,请访问站点,该站点链接自Tomas Lin的Grails 和 Heroku文章。

于 2012-07-29T07:55:41.070 回答
0

我认为您不能使用当前的Grails build pack设置上下文路径。如果您愿意,可以分叉构建包并对其进行破解以支持设置上下文(有关构建包的更多信息,请参见构建包文档)。

另一种选择是将您的 Grails 应用程序在本地构建到 WAR 文件中,然后使用WAR 部署来部署 WAR 文件。WAR 部署过程将使用webapp-runner实用程序使用 Tomcat 运行您的应用程序,它支持配置上下文路径。这是 webapp-runner 7.0.22.3 的帮助输出(我碰巧安装的,可能有点过时了):

Tomcat Runner runs a Java web application that is represented as an exploded war in a Tomcat container Usage: java -jar tomcat-runner.jar [arguments...] path/to/webapp Arguments: --session-timeout The number of minutes of inactivity before a user's session is timed out
--port The port that the server will accept http requests on
--context_xml The parth to the context xml to use
--path context path (default is /)
--session_manager session store to use (valid options are 'memcache')
--session_manager_operation_timeoutoperation timeout for the memcached session manager. (default is 5000ms)
--session_manager_locking_modeSession locking mode for use with memcache session store. (default is all)
--session_manager_ignore_patternRequest pattern to not track sessions for. Valid only with memcache session store. (default is '.*\.(png|gif|jpg|css|js)$'

WAR 部署文档WEBAPP_RUNNER_OPTS中所述,您可以使用config var为您的 webapp 设置 webapp-runner 选项。

于 2012-12-04T17:29:23.987 回答