Sinatra路线冲突

时间:2013-01-20 20:57:22

标签: routes sinatra

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

get '/' do
   ...
   haml :home
end

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

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

如果我使用通常的ruby app.rb运行服务器(也是瘦的)并访问localhost:4567,那么它会抱怨NilClass没有方法“some_method”...如果第二条路线后跟空字符串为id

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

尝试编写没有尾部斜杠的路线。 (有关详细信息,请参阅this page of the Sinatra FAQ