如何让Rails路由到控制器而不是公共文件夹中的静态文件?

在Rails 2.3应用程序中,我有一个SitemapController其中包含一个sitemap操作,可创建一个人类可读的站点地图页面,以及路径文件中的路径。 在公共文件夹中,有一个搜索引擎的sitemap.xml文件。 问题是http://mysite/sitemap正在提供sitemap.xml ,而不是路由到控制器。 如果我删除sitemap.xml那么它就可以很好地路由到控制器。

在其他几个非常相似的站点上,我们有完全相同的排列,但是那些sitemap.xml的存在并不能阻止Rails路由到控制器。 在这些网站上,正如预期的那样, http://mysite/sitemap路由到SitemapController#sitemaphttp://mysite/sitemap.xml提供静态文件。 然而,我一直无法发现可能导致这个问题的任何差异。

任何人都可以建议可能导致这种情况的原因,或者我可能会如何进行调试?

这可能是您托管应用程序的一个function。 不同的Web服务器环境具有可能影响此的默认设置。 例如,Apache倾向于以比调用应用程序更高的优先级提供静态文件,但是如果使用像Passenger这样的东西,它可以配置为根本不提供静态文件。

您更改此方式的方式在很大程度上取决于您使用的Web服务器软件。

你可以这样做:

 class SiteMapController def sitemap respond_to do |format| format.xml { render :file => "/any/path/you/want/to/your/sitemap.xml" } # you can then add other formats, like html, for a more human-readable response end end 

并删除/ public中的xml。

更多信息: http : //apidock.com/rails/ActionController/MimeResponds/respond_to