2010-10-17 35 views
1

我是Ruby on Rails(以前和現在的PHP專家)的新手,所以原諒我的無知,但我試圖讓Sinatra作爲中間件工作,因爲我嘗試重定向某些舊網址寶石架重寫並且無法讓它工作。RoR:Sinatra生成錯誤「未初始化常量」

我使用的代碼樣本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文件。

我在我的Gemfile中包含了Sinatra並運行了bundle安裝並確認它包含在內。

我只是想將舊網址從我的舊網站重新路由到我的新的紅寶石應用程序,但不能得到任何這種中間件/機架的東西工作。所有文檔都假定您不是全新的或者是3.0以前版本的RoR。

回答

2

如果您想重定向某些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文件。

+0

完美!我不知道lib文件沒有自動加載。我嘗試Sinatra的原因是因爲我閱讀常規路線比中間件執行速度慢,但我現在想現在什麼作品都很好,因爲我還是新手。 此外,它需要發送301頭,所以在常規路線中似乎更困難。 – user478798 2010-10-17 23:06:32