Ruby on rails 使用Ruby 1.9.3的Rails 4.1.2中,字符在US-ASCII之外的路径的Rails路由已停止工作

Ruby on rails 使用Ruby 1.9.3的Rails 4.1.2中,字符在US-ASCII之外的路径的Rails路由已停止工作,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一条路线: get "people/*name" => 'tools#biography', :as => 'person', :format => false 这使得人们可以通过名字来查找——例如myyapp.com/people/AndreaŠašinková——之前该url正确地加载了传记。现在由于ActionController::BadRequest错误而失败 这使Rails 4.1.1和4.1.2之间的工作停止 要简单地重现此过程,请创建一个新的rails应用

我有一条路线:

get "people/*name" => 'tools#biography', :as => 'person', :format => false
这使得人们可以通过名字来查找——例如myyapp.com/people/AndreaŠašinková——之前该url正确地加载了传记。现在由于ActionController::BadRequest错误而失败

这使Rails 4.1.1和4.1.2之间的工作停止

要简单地重现此过程,请创建一个新的rails应用程序,其中包含一个名为other的控制器和一个名为index的操作,并添加此路由:

get 'other/*id' => 'other#index', :format => false
现在正在呼叫localhost:3000/other/ková

将导致BADDREQUEST错误,将滑轨回滚到4.1.1,然后再次工作


url显然是%编码的,但当它开始运行\u dispatch/routing/route\u set.rb时,它失败了,因为该值被编码为US-ASCII,所以编码有效吗?返回false。我不知道rails代码中的参数是在哪里设置的,它们的编码是确定的。如果我修补rails代码以强制编码为utf-8,那么一切都会恢复正常。

我在rails上发现了一个错误,所有者已经解决了,正在修复它。以下是我随附补丁的bug:


请注意,如果使用ruby>=2作为默认编码,则不会发生这种情况,因为默认编码已更改为utf-8

Rails 4.1.3已过时。你试过了吗?是的,它在4.1.3或4.1.4中也不起作用。我在rails上提出了一个bug,编写了一个补丁,正在修复中。