0

在我的应用程序中,我有以下两条路线

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”...好像第二条路由后面跟着空字符串 as id

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

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

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

做什么?为了不再遇到此错误,我应该做些什么吗?我应该明目张胆地忽略它吗?

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

4

2 回答 2

5

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

Chrome,只要它没有得到 favicon.ico 的正确响应,就会发送另一个请求,这与我过于通用的路由冲突/:id

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

于 2013-01-21T11:52:56.530 回答
0

尝试编写不带斜杠的路线。(有关更多信息,请参阅Sinatra 常见问题解答页面

于 2013-01-20T23:08:20.020 回答