【问题标题】:RoR: Sinatra producing error "uninitialized constant"RoR:Sinatra 产生错误“未初始化的常量”
【发布时间】:2010-10-18 05:59:55
【问题描述】:

我是 Ruby on Rails 的新手(以前和现在的 PHP 专家)所以请原谅我的无知,但我试图让 Sinatra 作为中间件来重定向一些旧的 url,因为我尝试了 gem rack-rewrite 并且不能让它工作。

我正在使用来自 ASCIIcast 的代码示例,所以在我的 routes.rb 中我有以下内容:

root :to => HomeApp

(^ 我重定向根目录只是为了测试)

在我的 lib 文件夹中,我有 home_app.rb

class HomeApp < Sinatra::Base  
  get "/" do  
    "Hello from Sinatra"  
  end  
end 

当我启动服务器(或者如果它已经在运行)它会产生错误:

routes.rb:10: uninitialized constant HomeApp

这似乎只是不知道 lib/home_app.rb 文件。

我已将 Sinatra 包含在我的 Gemfile 中并运行 bundle install 并确认它已包含。

我只想将旧网站中的旧网址重新路由到新的 ruby​​ 应用程序,但无法让这些中间件/机架的任何东西正常工作。所有文档都假设您不是一个完全的新手,或者是 RoR 3.0 之前的版本。

【问题讨论】:

    标签: ruby-on-rails sinatra


    【解决方案1】:

    如果你想重定向一些 URL,你不需要使用 Sinatra。您可以使用新的redirect 方法。请参阅Rails Dispatch article

    match "/stories/:year/:month/:day/:name" => redirect("/%{name}")
    
    constraints :user_agent => /iPhone/, :subdomain => /^(?!i\.)/ do
      match "*path" => redirect {|params, req| "http://i.myapp.com/#{req.fullpath}" }
    end
    

    在您的具体情况下,问题在于未加载 HomeApp 类。将 /lib 文件夹添加到您的加载路径更改 application.rb

    config.autoload_paths += %W( #{config.root}/lib )
    

    require 文件。

    【讨论】:

    • 完美!我不知道 lib 文件没有自动加载。我尝试 Sinatra 的原因是因为我读到常规路由的执行速度比中间件慢,但我想现在任何工作都很好,因为我还是新手。它还需要发送 301 标头,因此在常规路由中似乎更加困难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2011-09-29
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多