【问题标题】:How to route "/" to public/index.html in routes.rb?如何将“/”路由到 routes.rb 中的 public/index.html?
【发布时间】:2012-02-27 20:12:14
【问题描述】:

我的 Facebook 应用使用 AS3 前端和 APIish Rails 后端。

Facebook 要求您的“画布页面”(您的应用页面被 Facebook chrome 吸收)要么是动态的(index.erb)要么是目录(以“/”结尾)。由于我不了解 Rails 视图,因此我使用了“myapp.herokuapps.com/”的 url。

Heroku 日志给出此错误:

ActionController::RoutingError(没有路由匹配“/”)

如何将“/”匹配到索引文件?

匹配 "/" => ??????

我习惯于路由资源,而不是静态页面。

【问题讨论】:

    标签: ruby-on-rails facebook heroku routes


    【解决方案1】:

    如果您想以 root 身份显示静态页面,您应该使用高压 gem。这允许您将静态页面添加到您的网站,如下所示:

    • gem 'high_voltage' 添加到您的Gemfile
    • 将您的静态home.html.erb 页面放入/app/views/pages/
    • 使用root to: => 'high_voltage/pages#show', :id => 'home' 路由到您的静态页面

    不需要重定向。

    高压文档可以在https://github.com/thoughtbot/high_voltage找到。

    【讨论】:

      【解决方案2】:

      你需要在你的 routes.rb 文件中定义一个 root_path

      所以root :to => 'YOUR_CONTROLLER_NAME#YOUR_CONTROLLER_ACTION' 应该这样做。

      如果你想将它映射到一个文件,那么只需在公共目录中给出文件的名称,所以如果你想将 public/index.html 映射到根目录,那么这将起作用:

      root :to => 'index'
      

      【讨论】:

      • 那么“/”会自动匹配到根目录吗?那么我如何将根映射到页面而不是控制器呢?根 :to=> "public/index.html"?
      • 查看我的更新答案。如果它适合你,请接受并投票!
      • 路由仍然需要一个动作参数:/app/vendor/bundle/ruby/1.9.1/gems/actionpack-3.0.9/lib/action_dispatch/routing/mapper.rb:171 :in `default_controller_and_action': 缺少 :action (ArgumentError)
      • 您的公共目录中是否有一个名为 index.html 的文件?这对我来说很好。
      • 好吧,有趣,这是 Rails 3.1 的一个特性。看来这在 Rails 3.0.9 中不容易做到。
      【解决方案3】:

      两个答案都是正确的;但是,thoughtbot 的人们推荐以下内容:

      1. 在“config/initializers/”下创建文件“high_voltage.rb”
      2. 编写如下代码

        HighVoltage.configure do |config|
            config.home_page = "home"
        end
        
      3. 重启服务器

      您可以在https://github.com/thoughtbot/high_voltage#specifying-a-root-path查看文档

      【讨论】:

        猜你喜欢
        • 2023-03-25
        • 1970-01-01
        • 2011-09-09
        • 1970-01-01
        • 2016-03-28
        • 2019-07-17
        • 1970-01-01
        • 1970-01-01
        • 2019-10-26
        相关资源
        最近更新 更多