我在Heroku上使用Grails堆栈来部署应用程序。我希望能够使用myapp.herokuapp.com/xyz
的根而不是myapp.herokuapp.com
来提供我的应用,就像我能够在开发中从localhost:8080/xyz
的根服务一样。我尝试在Config.groovy中添加grails.app.context
,如下所示:
environments {
production {
grails.app.context = "/xyz"
}
}
但它似乎没有对部署产生影响。我必须使用Heroku配置一些东西吗?有什么想法吗?
答案 0 :(得分: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>
如果这有助于对this网站提供适当的赠送金额,该网站是由Tomas Lin撰写的Grails and Heroku文章链接的。
答案 1 :(得分:0)
我认为您不能使用当前Grails build pack设置上下文路径。如果您愿意,可以分叉构建包并破解它以支持设置上下文(有关构建包的更多信息,请参阅build pack doc)。
另一种选择是将您的Grails应用程序本地构建到WAR文件中,并使用WAR deployment部署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 deploy doc中所述,您可以使用WEBAPP_RUNNER_OPTS
配置变量为您的网络应用设置webapp-runner选项。