为Heroku Grails应用程序配置根URL

时间:2012-07-28 16:19:53

标签: grails heroku jetty

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

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

但它似乎没有对部署产生影响。我必须使用Heroku配置一些东西吗?有什么想法吗?

2 个答案:

答案 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选项。