2014-02-19 33 views
2

運行帶有run-app的grails應用程序時,如何從根上下文提供文件。例如,我想從/robots.txt提供robots.txt文件,並從/mygrailsapp/提供我的申請。grails根文件中的run-app服務文件

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仍然使用jetty嗎? http://colinharrington.net/blog/2008/07/grails-jetty-and-crossdomainxml/

與問題How to place certain files in the root directory of the Grails server?類似,但我想要一個包含在grails項目中的解決方案。

感謝,

彌敦道

+0

你只是試圖從/mygrailsapp/robots.txt顯示robots.txt文件系統上的第一級目錄中的實際文件嗎? – derdc

+0

爲了讓網絡爬蟲檢測robots.txt,它必須從/中被提供,並且不會從/ mygrailsapp /中識別。它在文件系統上的位置並不重要。 –

回答

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") 
} 

與運行應用程序啓動Grails和/robots.txt會得到腳本/ rootContext/robots.txt的服務。