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

时间:2011-09-09 15:09:34

标签: ruby-on-rails ruby-on-rails-2

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

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

有人可以提出可能导致这种情况的原因,或者我可能会如何调试它?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

你可以这样做:

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