В настоящий момент я переписываю целое приложение с Rails 3 на Rails 6.
В этом процессе я также очищаю много вещей.
Но вот моя проблема.
У меня есть модуль с именем Reusable
, который, как следует из названия, содержит массу методов многократного использования в разных моделях.
Мы используем Faraday
, чтобы установить sh соединение с определенным сервером:
Старый код выглядел следующим образом:
module Reusable
def self.establish_connection(url)
url = I18n.transliterate(url)
url = URI.encode(url)
conn = Faraday.new(url: url) do |builder|
builder.use :cookie_jar
builder.use FaradayMiddleware::FollowRedirects
builder.adapter Faraday.default_adapter
end
conn.get
conn
rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Errno::ETIMEDOUT => e
message = "(Timeout::Error) Connection to address: #{url} failed. If address is reachable please run the method again."
end
end
Однако при переходе на Ruby 2.7.0, у нас страшное URI.encode
является устаревшим предупреждением.
Чтобы избавиться от этого, я переписал целую часть примерно так:
module Reusable
def self.establish_connection(url)
url = I18n.transliterate(url)
url = URI.encode_www_form_component(url)
conn = Faraday.new(url: url) do |builder|
builder.request :url_encoded
builder.use :cookie_jar
builder.use FaradayMiddleware::FollowRedirects
builder.adapter Faraday.default_adapter
end
conn.get
conn
rescue Faraday::ConnectionFailed, Faraday::TimeoutError, Errno::ETIMEDOUT => e
message = "(Timeout::Error) Connection to address: #{url} failed. If address is reachable please run the method again."
end
end
Однако я получаю это:
Я искал SO для решения этой проблемы, и я нашел это -> URI :: InvalidURIError (неверный URI (не URI?):):
Но это снова возвращает меня к использованию URI.encode
, которого я хочу избежать.
Есть какое-нибудь решение этой проблемы, или я должен просто спокойно пока игнорировать устаревшее предупреждение, пока не появится что-то лучшее?