我正在使用 Rails 4 和 Ruby 2,部署在 Heroku 上。我的应用程序使用 OpenURI 打开网页(然后将 HTML 传递给 Nokogiri 进行解析)。在我的本地机器上,这工作正常;在 Heroku 上,当程序到达该open
方法的行时,我收到 403 错误。我已经做了以下事情:
open-uri
在我的申请中需要- 在我的方法调用中添加了
'User-Agent'
密钥open
- 在我的 Gemfile 中包含所有必需的 Heroku 兼容性 gem,如此处指定
这是违规行:
doc = Nokogiri::HTML(open(url, 'User-Agent' => "Ruby/#{RUBY_VERSION}"))
以下是相关的(我相信)Heroku 日志:
2013-10-22T01:20:53.281117+00:00 app[web.1]: Started POST "/texts/parse" for 66.
31.247.63 at 2013-10-22 01:20:53 +0000
2013-10-22T01:20:53.281117+00:00 app[web.1]: Started POST "/texts/parse" for 66.
31.247.63 at 2013-10-22 01:20:53 +0000
2013-10-22T01:20:53.287518+00:00 app[web.1]: Processing by TextsController#parse
as HTML
2013-10-22T01:20:53.287518+00:00 app[web.1]: Processing by TextsController#parse
as HTML
2013-10-22T01:20:53.287692+00:00 app[web.1]: Parameters: {"utf8"=>"???", "auth
enticity_token"=>"zKqzrI7qaDjav1HA56kdiNi01Mgbavg4Xhff+t4bDh0=", "url"=>"http://
www.gutenberg.org/files/135/135-h/135-h.htm", "commit"=>"Import"}
2013-10-22T01:20:53.287692+00:00 app[web.1]: Parameters: {"utf8"=>"???", "auth
enticity_token"=>"zKqzrI7qaDjav1HA56kdiNi01Mgbavg4Xhff+t4bDh0=", "url"=>"http://
www.gutenberg.org/files/135/135-h/135-h.htm", "commit"=>"Import"}
2013-10-22T01:20:44.346845+00:00 heroku[web.1]: Starting process with command `b
in/rails server -p 30331 -e $RAILS_ENV`
2013-10-22T01:20:53.536799+00:00 app[web.1]: Completed 500 Internal Server Error
in 247ms
2013-10-22T01:20:53.536799+00:00 app[web.1]: Completed 500 Internal Server Error
in 247ms
2013-10-22T01:20:53.537796+00:00 app[web.1]:
2013-10-22T01:20:53.537796+00:00 app[web.1]: OpenURI::HTTPError (403 Forbidden):
2013-10-22T01:20:53.537796+00:00 app[web.1]: app/controllers/texts_controller.
rb:75:in `parse'
2013-10-22T01:20:53.537796+00:00 app[web.1]:
2013-10-22T01:20:53.537796+00:00 app[web.1]:
2013-10-22T01:20:53.537796+00:00 app[web.1]:
2013-10-22T01:20:53.537796+00:00 app[web.1]: OpenURI::HTTPError (403 Forbidden):
2013-10-22T01:20:53.537796+00:00 app[web.1]: app/controllers/texts_controller.
rb:75:in `parse'
我已经做了很多搜索,但找不到解决方法。通常问题是人们忘记'open-uri'
在他们的应用程序中要求。任何帮助是极大的赞赏。