Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Routes 西纳特拉路线冲突_Routes_Sinatra - Fatal编程技术网

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