【问题标题】:grails run-app serve files from root contextgrails run-app 从根上下文提供文件
【发布时间】:2014-02-19 17:19:29
【问题描述】:

当使用 run-app 运行 grails 应用程序时,如何从根上下文提供文件。例如,我想从/robots.txt 提供robots.txt 文件,并从/mygrailsapp/ 提供我的应用程序。

grails run-app 是否使用 tomcat?如何配置 tomcat 插件以从根上下文提供静态文件?

到目前为止采取的失败路径...

1) 我找到了一种将项目设置为根上下文的方法,因此所有内容都从根上下文提供,但这不是我想要的。 http://nickcarroll.me/2009/03/27/configuring-the-grails-root-application-context/

2) 我发现一篇旧文章 (2008) 描述了如何使用 run-app 和 jetty 启用多个上下文。 run-app 是否仍然使用码头? http://colinharrington.net/blog/2008/07/grails-jetty-and-crossdomainxml/

类似于问题How to place certain files in the root directory of the Grails server?,但我想要一个包含在 grails 项目中的解决方案。

谢谢,

内森

【问题讨论】:

  • 您只是想显示 /mygrailsapp/robots.txt 中的 robots.txt 还是将实际文件放在文件系统的第一级目录中很重要?
  • 为了让网络爬虫检测 robots.txt,它必须从 / 提供,并且不会从 /mygrailsapp/ 识别它在文件系统上的位置根本无关紧要。

标签: tomcat grails


【解决方案1】:

经过一番挖掘,看起来这很容易。

首先,嵌入式 tomcat 可以通过 scripts/_Events.groovy 使用 eventConfigureTomcat 事件处理程序进行配置。 http://roshandawrani.wordpress.com/2011/03/13/grails-tip-configuring-embedded-tomcat-instance-used-in-developmenttest-env/

其次,您可以添加另一个上下文以从根目录提供文件。 http://grails.1312388.n4.nabble.com/Add-virtual-directory-in-grails-tomcat-plugin-td2234448.html#a2234448

import org.apache.catalina.loader.WebappLoader

eventConfigureTomcat = {tomcat ->
    File dir = new File("./scripts/rootContext")
    def rootContext = tomcat.addWebapp("/", dir.getAbsolutePath())
    rootContext.reloadable = true
    rootContext.loader = new WebappLoader(tomcat.class.classLoader)

    //bonus answer - gzip json response
    tomcat.connector.setAttribute("compression", "on")
    tomcat.connector.setAttribute("compressableMimeType", "applicatio/json")
}

使用 run-app 启动 grails,/robots.txt 将从 scripts/rootContext/robots.txt 获得服务。

【讨论】:

    猜你喜欢
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多