在我的應用程序有以下兩種途徑西納特拉路線衝突
get '/' do
...
haml :home
end
和
get '/:id' do
@variable = Something.get(params[:id])
somethingelse = @variable.some_method
...
haml :show
end
如果我使用shotgun
執行我的應用程序和訪問本地主機:9393(默認地址和獵槍的端口),一切正常,即沒有錯誤消息顯示在日誌中
如果我運行服務器(也是瘦安裝)與通常ruby app.rb
並訪問本地主機:4567,然後它抱怨NilClass沒有方法「some_method
」...好像第二條路由後面跟着空字符串id
。
在Sinatra文檔中,據說路由是按順序調用的,所以它甚至不會遇到第二個路由。我錯了嗎?
作爲一項測試,我將第二條路線更改爲'/:id/show'
,並且沒有任何錯誤。
在這兩種情況下(我的意思是用霰彈槍和普通服務器)網站呈現完美,即在/
視圖是正確的home.haml和不show.haml。所以錯誤只出現在日誌文件中。真相被告知,@variable.some_method
直接在視圖中調用,而瀏覽/
我從/show.haml
得到一個錯誤。
怎麼辦?有什麼我應該做的,不再遇到這個錯誤?我應該公然忽略它嗎?
編輯:輸出和代碼的相關部分可以在這裏找到:https://gist.github.com/4585374
我不相信這是從您提供的信息中找到Sinatra的路線選擇。如果你添加了進一步的日誌記錄,甚至在每個路由和每個視圖中都有'warn',那麼你就可以看到什麼時候被調用。順便說一句,第二條路線的代碼有一個錯字。 – iain
我添加了原來問題中得到的輸出。感謝您的錯字,它只是在這裏,而不是在實際的代碼中。 – Helios