如何将某些文件放在Grails服务器的根目录中?

时间:2009-05-07 20:00:42

标签: flex grails configuration

我使用grails应用程序作为Flex前端的后端。为了能够轻松地开发和调试我的应用程序,我需要将crossdomain.xml文件放入服务器的根目录,即必须可以通过http://localhost:8080/crossdomain.xml访问它。类似的用例可能是部署了favicon.ico或robots.txt,但是这可以通过带有默认根Web应用程序的tomcat服务器在生产环境中完成。

在我的情况下,我需要在运行grails run-app之后使用crossdomain.xml。我知道我可以将整个应用程序移动到根目录(http://ca.rroll.net/2009/03/27/configuring-the-grails-root-application-context/)但是这也不是我想要的,因为grails应用程序应该仍然位于其默认应用程序上下文之下。

有人知道,我怎么能这样做?我是否必须以某种方式重新配置我的grails安装的jetty servlet容器?

2 个答案:

答案 0 :(得分:1)

我想我找到了答案。我还没试过,所以YMMV。

在此article中,Colin Harrington讨论了通过部署额外的Jetty上下文在服务器的根目录下提供crossdomain.xml文件。

他的技术首先在此博客entry中提出,其中作者还讨论了使用Static Resources Plugin作为另一种选择

答案 1 :(得分:0)

我找到了用Apache和mod_proxy解决这个问题的方法。这允许您的Grails安装和Grails项目保持原始状态。没有黑客攻击Grails内部,没有添加插件,你可能不需要在生产中。

<强> 1。安装Apache httpd 2.2

这样做对您的操作系统最有意义。安装Apache 2.2非常重要。我在Ubuntu系统上做了这个,所以任何特定的命令和文件位置都将用于Ubuntu。根据您的系统的需要进行修改。

安装Apache后,启动httpd。

sudo /sbin/service httpd start

使用网络浏览器测试它是否正确安装。

<强> 2。创建根目录

选择磁盘上保存静态文件的位置。这将是httpd的文档根目录。我将使用/ var / grails_root。

mkdir /var/grails_root
touch /var/grails_root/crossdomain.xml

第3。在httpd.conf中创建一个VirtualHost

在您喜欢的文本编辑器中打开httpd.conf。

vim /etc/httpd/conf/httpd.conf

选择您喜欢的端口,并在该端口上创建虚拟主机。我将使用9090,但任何端口都可以。

将这些行添加到httpd.conf

Listen 9090
<VirtualHost *:9090>
    DocumentRoot "/var/grails_root"
    <Directory "/var/grails_root">
        Allow from all
    </Directory>
</VirtualHost>

重新启动httpd

sudo /sbin/service httpd restart

测试您现在是否能够访问文档根目录中的静态文件。如果没有,您需要先解决此问题,然后再继续下一步。

<强> 4。启用mod_proxy和mod_proxy_http

您需要加载这两个模块。 mod_proxy具有代理的基本功能,mod_proxy_xxx模块具有特定于协议的信息。它们标配httpd 2.2,所以你不需要安装任何额外的东西。

将这些行添加到httpd.conf

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

现在修改您在上一步中设置的虚拟主机。 (您可以省略评论)

<VirtualHost *:9090>
    DocumentRoot "/var/grails_root"
    <Directory "/var/grails_root">
        Allow from all
    </Directory>
# New lines start here
    ProxyRequests Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>
    ProxyPass /grailsApp http://your.grails.server:8080/grailsApp
# New lines end here
</VirtualHost>

重新启动httpd

sudo /sbin/service httpd restart

现在,您应该可以通过端口9090访问静态文件和Grails应用程序。

这完全基于以下信息:http://docs.codehaus.org/display/JETTY/Configuring+mod_proxy

在其他版本的Apache上执行此操作的信息可在同一站点上获得。