在我的申请中我有以下两条路线
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
答案 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)