欧盟中央银行 Gem 禁止重定向
EU Central Bank Gem redirection forbidden
目前,我在 rails 收到来自欧盟中央银行 gem 的错误消息;
2018-09-06T18:26:20.629896+00:00 app[web.1]: Error ID: 79f8e4f3
2018-09-06T18:26:20.629903+00:00 app[web.1]: Error details saved to: /tmp/passenger-error.ZqeFNI
2018-09-06T18:26:20.629905+00:00 app[web.1]: Message from application: redirection forbidden: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml -> https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml (RuntimeError)
2018-09-06T18:26:20.629907+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:224:in `open_loop'
2018-09-06T18:26:20.629908+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:150:in `open_uri'
2018-09-06T18:26:20.629912+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:716:in `open'
2018-09-06T18:26:20.629916+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:34:in `open'
2018-09-06T18:26:20.629919+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/eu_central_bank-0.5.0/lib/eu_central_bank.rb:87:in `doc'
2018-09-06T18:26:20.629941+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/eu_central_bank-0.5.0/lib/eu_central_bank.rb:20:in `update_rates'
2018-09-06T18:26:20.629976+00:00 app[web.1]: /app/config/initializers/money.rb:5:in `<top (required)>'
2018-09-06T18:26:20.630007+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
2018-09-06T18:26:20.630038+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
2018-09-06T18:26:20.630069+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
2018-09-06T18:26:20.630099+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
2018-09-06T18:26:20.630128+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:652:in `block in load_config_initializer'
2018-09-06T18:26:20.630158+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
2018-09-06T18:26:20.630205+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:651:in `load_config_initializer'
2018-09-06T18:26:20.630344+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
2018-09-06T18:26:20.630376+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `each'
2018-09-06T18:26:20.630409+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `block in <class:Engine>'
2018-09-06T18:26:20.630438+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
2018-09-06T18:26:20.630467+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
2018-09-06T18:26:20.630497+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
我认为 gem 或 xml 文件夹有问题。但是事情突然发生了。该应用程序现已于 rails 关闭。无法将 link 从 http 更改为 https
显然,您遇到了与此问题相同的问题:
Ruby open-uri redirect forbidden
这是因为欧盟中央银行强制重定向到 https
但 openuri
图书馆不允许这样做,这就是为什么您会收到此错误:redirection forbidden
.
有一个名为 open_uri_redirections
的 gem 将修补 openuri
以允许重定向。
https://github.com/open-uri-redirections/open_uri_redirections
您需要做的就是:
- 将此 gem 包含在您的
Gemfile
中。
$ bundle install
安装新添加的gem.
require 'open_uri_redirections'
这应该可以暂时解决您的问题。
另一个修复(推荐)是猴子补丁 eu_central_bank
gem 覆盖
ECB_RATES_URL
在 eu_central_bank/lib/eu_central_bank.rb:20
ECB_90_DAY_URL
在 eu_central_bank/lib/eu_central_bank.rb:21
常量 https
而不是 http
。
如下(把这段代码放到config/initializers/patch_eu_central_bank.rb
):
require 'eu_central_bank'
class EuCentralBank
ECB_RATES_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'.freeze
ECB_90_DAY_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'.freeze
end
您可能会看到一些警告,例如:
warning: already initialized constant EuCentralBank::ECB_RATES_URL
.
您可以接受它,直到 PR 在 EuCentralBank
gem 处合并。
目前,我在 rails 收到来自欧盟中央银行 gem 的错误消息;
2018-09-06T18:26:20.629896+00:00 app[web.1]: Error ID: 79f8e4f3
2018-09-06T18:26:20.629903+00:00 app[web.1]: Error details saved to: /tmp/passenger-error.ZqeFNI
2018-09-06T18:26:20.629905+00:00 app[web.1]: Message from application: redirection forbidden: http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml -> https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml (RuntimeError)
2018-09-06T18:26:20.629907+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:224:in `open_loop'
2018-09-06T18:26:20.629908+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:150:in `open_uri'
2018-09-06T18:26:20.629912+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:716:in `open'
2018-09-06T18:26:20.629916+00:00 app[web.1]: /app/vendor/ruby-2.2.4/lib/ruby/2.2.0/open-uri.rb:34:in `open'
2018-09-06T18:26:20.629919+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/eu_central_bank-0.5.0/lib/eu_central_bank.rb:87:in `doc'
2018-09-06T18:26:20.629941+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/eu_central_bank-0.5.0/lib/eu_central_bank.rb:20:in `update_rates'
2018-09-06T18:26:20.629976+00:00 app[web.1]: /app/config/initializers/money.rb:5:in `<top (required)>'
2018-09-06T18:26:20.630007+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
2018-09-06T18:26:20.630038+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
2018-09-06T18:26:20.630069+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
2018-09-06T18:26:20.630099+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
2018-09-06T18:26:20.630128+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:652:in `block in load_config_initializer'
2018-09-06T18:26:20.630158+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
2018-09-06T18:26:20.630205+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:651:in `load_config_initializer'
2018-09-06T18:26:20.630344+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
2018-09-06T18:26:20.630376+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `each'
2018-09-06T18:26:20.630409+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/engine.rb:615:in `block in <class:Engine>'
2018-09-06T18:26:20.630438+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `instance_exec'
2018-09-06T18:26:20.630467+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:30:in `run'
2018-09-06T18:26:20.630497+00:00 app[web.1]: /app/vendor/bundle/ruby/2.2.0/gems/railties-4.2.0/lib/rails/initializable.rb:55:in `block in run_initializers'
我认为 gem 或 xml 文件夹有问题。但是事情突然发生了。该应用程序现已于 rails 关闭。无法将 link 从 http 更改为 https
显然,您遇到了与此问题相同的问题:
Ruby open-uri redirect forbidden
这是因为欧盟中央银行强制重定向到 https
但 openuri
图书馆不允许这样做,这就是为什么您会收到此错误:redirection forbidden
.
有一个名为 open_uri_redirections
的 gem 将修补 openuri
以允许重定向。
https://github.com/open-uri-redirections/open_uri_redirections
您需要做的就是:
- 将此 gem 包含在您的
Gemfile
中。 $ bundle install
安装新添加的gem.require 'open_uri_redirections'
这应该可以暂时解决您的问题。
另一个修复(推荐)是猴子补丁 eu_central_bank
gem 覆盖
ECB_RATES_URL
在 eu_central_bank/lib/eu_central_bank.rb:20
ECB_90_DAY_URL
在 eu_central_bank/lib/eu_central_bank.rb:21
常量 https
而不是 http
。
如下(把这段代码放到config/initializers/patch_eu_central_bank.rb
):
require 'eu_central_bank'
class EuCentralBank
ECB_RATES_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'.freeze
ECB_90_DAY_URL = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml'.freeze
end
您可能会看到一些警告,例如:
warning: already initialized constant EuCentralBank::ECB_RATES_URL
.
您可以接受它,直到 PR 在 EuCentralBank
gem 处合并。