Sinatra路线冲突

Hel*_*ios 0 routes sinatra

在我的申请中,我有以下两条路线

get '/' do
   ...
   haml :home
end
Run Code Online (Sandbox Code Playgroud)

get '/:id' do
    @variable = Something.get(params[:id])
    somethingelse = @variable.some_method
    ...
    haml :show
end
Run Code Online (Sandbox Code Playgroud)

如果我使用shotgun并执行我的应用程序并访问localhost:9393(shotgun的默认地址和端口),一切正常,即日志中不显示任何错误消息

如果我使用平常运行服务器(也是瘦的安装)ruby app.rb并访问localhost:4567,那么它会抱怨some_methodNilClass 没有方法" ",好像第二条路由后跟空字符串一样id.

在Sinatra文档中,据说路由是按顺序调用的,所以它甚至不应该遇到第二个.我错了吗?

作为测试,我改变了第二条路线,'/:id/show'并且不再有错误.

在这两种情况下(我的意思是同时使用霰弹枪和普通服务器)网站都是完美呈现的,即在/视图中是正确的home.haml而不是show.haml.因此错误仅出现在日志文件中.要讲的真相,@variable.some_method直接在视图中调用,而在浏览时/我收到了错误/show.haml.

怎么办?有什么我不应该再遇到这个错误吗?我应该公然忽视它吗?

编辑:输出和代码的相关部分可以在这里找到:https://gist.github.com/4585374

Hel*_*ios 5

显然这是因为Chrome而导致的问题(请参阅https://groups.google.com/forum/?fromgroups=#!topic/nodejs/A415fHudhhM)

Chrome,无论何时没有得到针对favicon.ico的正确回复,都会发送另一个请求,这与我太通用的路由冲突 /:id

favicon.ico(甚至为空)添加public项目根目录中文件夹,修复了这个问题,因为现在chrome在请求favicon时获得200响应.使用firefox从一开始就没有出现此错误的迹象.

  • 很高兴你得到了答案.我没有遇到运行Safari的问题,所以它不是webkit的事情. (2认同)