【问题标题】:How do i get Rails to route to a controller instead of a static file in the public folder?如何让 Rails 路由到控制器而不是公用文件夹中的静态文件?
【发布时间】:2011-09-09 15:09:34
【问题描述】:

在 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 提供静态文件。然而,我无法发现任何可能导致此问题的差异。

谁能建议可能是什么原因造成的,或者我可以如何调试它?

【问题讨论】:

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


    【解决方案1】:

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

    你改变它的方式很大程度上取决于你使用的网络服务器软件。

    【讨论】:

    • 你是对的。问题原来是不同的 Apache 配置文件。事实证明,我们需要禁用MultiViews 才能与Passenger 兼容。
    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-05-26
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多