Routes 西纳特拉路线冲突
在我的应用程序中,我有以下两条路线Routes 西纳特拉路线冲突,routes,sinatra,Routes,Sinatra,在我的应用程序中,我有以下两条路线 get '/' do ... haml :home end 及 如果我使用shotgun执行应用程序并访问localhost:9393(shotgun的默认地址和端口),则一切正常,即日志中不显示任何错误消息 如果我用通常的ruby app.rb运行服务器(也安装了thin)并访问localhost:4567,那么它会抱怨没有方法“some_method”用于NilClass。。。就好像第二条路由后面跟着一个空字符串,即id 在Sinatra文档
get '/' do
...
haml :home
end
及
如果我使用shotgun
执行应用程序并访问localhost:9393(shotgun的默认地址和端口),则一切正常,即日志中不显示任何错误消息
如果我用通常的ruby app.rb
运行服务器(也安装了thin)并访问localhost:4567,那么它会抱怨没有方法“some_method
”用于NilClass。。。就好像第二条路由后面跟着一个空字符串,即id
在Sinatra文档中,据说路由是按顺序调用的,所以它甚至不应该遇到第二个路由。我错了吗
作为测试,我将第二条路由更改为'/:id/show'
,不再出现错误
在这两种情况下(我的意思是使用鸟枪和普通服务器),网站都呈现得非常完美,即在/
中,视图正确地显示为home.haml而不是show.haml。因此,错误只出现在日志文件中。老实说,@变量。某些方法在视图中直接调用,在浏览/
时,我从/show.haml
得到一个错误
你怎么办?我是否应该做些什么来避免再遇到这个错误?我应该公然无视它吗
编辑:可以在此处找到输出和代码的相关部分:尝试编写不带尾随斜杠的路由。(有关更多信息,请参见)尝试写入不带尾随斜杠的路由。(请参阅了解更多信息)显然,这是我因为Chrome而遇到的问题(请参阅)
每当Chrome没有得到favicon.ico的正确响应时,它就会发送另一个请求,这与我过于通用的路由冲突/:id
将favicon.ico
(甚至是空的)添加到项目根目录中的public
文件夹中,解决了这个问题,因为现在chrome在请求favicon时得到200响应。firefox从一开始就没有出现这个错误的迹象。显然,这是我因为Chrome而遇到的问题(请参阅)
每当Chrome没有得到favicon.ico的正确响应时,它就会发送另一个请求,这与我过于通用的路由冲突/:id
将favicon.ico
(甚至是空的)添加到项目根目录中的public
文件夹中,解决了这个问题,因为现在chrome在请求favicon时得到200响应。对于firefox,从一开始就没有出现此错误的迹象。我不认为这是因为Sinatra根据您提供的信息选择了路线。如果您在每个路由和每个视图中添加进一步的日志记录,甚至是一个警告
,这样您就可以看到什么时候被调用。顺便说一句,第二条路线的代码有一个输入错误。我添加了我在原始问题中得到的输出。谢谢你的输入错误,它只是在这里,而不是在实际的代码中。我不相信这是因为Sinatra根据你提供的信息选择了路线。如果您在每个路由和每个视图中添加进一步的日志记录,甚至是一个警告
,这样您就可以看到什么时候被调用。顺便说一句,第二条路线的代码有一个输入错误。我添加了我在原始问题中得到的输出。谢谢你的输入错误,它只是在这里,而不是在实际代码中。它是一个输入错误,没有尾随斜杠,只是get'/:id'
它是一个输入错误,没有尾随斜杠,只是get'/:id'
很高兴你得到了答案。我在运行Safari时没有遇到这个问题,所以这不是webkit的问题。很高兴你得到了答案。我在运行Safari时没有遇到这个问题,所以这不是webkit的问题。
get '/:id' do
@variable = Something.get(params[:id])
somethingelse = @variable.some_method
...
haml :show
end