2013-01-20 37 views
0

在我的應用程序有以下兩種途徑西納特拉路線衝突

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

+0

我不相信這是從您提供的信息中找到Sinatra的路線選擇。如果你添加了進一步的日誌記錄,甚至在每個路由和每個視圖中都有'warn',那麼你就可以看到什麼時候被調用。順便說一句,第二條路線的代碼有一個錯字。 – iain

+0

我添加了原來問題中得到的輸出。感謝您的錯字,它只是在這裏,而不是在實際的代碼中。 – Helios

回答

5

顯然,這是一個問題,我是因爲Chrome瀏覽器(見https://groups.google.com/forum/?fromgroups=#!topic/nodejs/A415fHudhhM

瀏覽器,只要它沒有得到favicon.ico的一個正確的響應,則發送另一個請求,這我太通用路由/:id

項目的根,添加favicon.ico(即使是空的)public文件夾修復了這個問題衝突,因爲ñ當請求圖標時,ow chrome得到200響應。有了Firefox,從一開始就沒有出現這個錯誤的跡象。

+2

很高興你有一個答案。我沒有得到運行Safari的這個問題,所以它不是一個webkit的東西。 – iain