utf8-cleaner
gem 我正在努力解决这个问题一年多了,而且我无法在我的开发环境中重现它,这使我很难理解为什么会发生这种情况以及如何解决。这是我得到的错误通知(通过使用ExceptionNotifier的电子邮件):
A ArgumentError occurred in home#index:
invalid byte sequence in UTF-8
.bundle/gems/ruby/1.9.1/gems/rack-1.4.5/lib/rack/utils.rb:104:in `normalize_params'
显然是由中国蜘蛛引起的:
HTTP_USER_AGENT : Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)
我尝试过几件事,看看我earlier question我试图捕捉错误的地方。
我还有安装程序utf8-cleaner
gem,但这似乎无法解决,除非我错过了一步。
如何重现此问题?请注意,当我访问它时,导致问题的URL完全正确(?)
gem 'rack-utf8_sanitizer'
Gemfile
config.middleware.insert 0, Rack::UTF8Sanitizer
application.rb
$ bundle install
在我的Heroku PRODUCTION上完全适用于DEV但失败了,存在以下问题:
$ heroku run rake middleware --a test-app
Running `rake middleware` attached to terminal... up, run.4846
WARNING: Nokogiri was built against LibXML version 2.8.0, but has dynamically loaded 2.7.6
rake aborted!
uninitialized constant Rack::UTF8Sanitizer
/app/config/application.rb:71:in `<class:Application>'
我仍在调查我为什么要这样做。
答案 0 :(得分:1)
我设法修复它(在Rails 3.2.18应用程序上),如本主题所述:
答案 1 :(得分:1)
HTTP_USER_AGENT : Mozilla/5.0 (compatible; EasouSpider; +http://www.easou.com/search/spider.html)
#!ruby
invalid = "data\xed\xe5\xed\xe0".force_encoding('ASCII-8BIT')
`curl localhost:3000 -d #{invalid}`
这解决了我的Dev环境,但不适用于Heroku。我相应地更新了我的问题。
更新:
我在application.rb文件中添加了require“rack / utf8_sanitizer”,这似乎解决了Heroku问题。