Похоже, что Omniauth теперь использует более новую версию Faraday, которая объясняет, почему патч обезьяны выше не работал на меня. Я согласен, должно быть лучше, но и для всех, кто просто хочет получить работу, чтобы проверить, вот обновленная версия:
(создать файл в каталоге инициализаторов со следующим кодом)
require 'faraday'
module Faraday
class Adapter
class NetHttp < Faraday::Adapter
def call(env)
super
url = env[:url]
req = env[:request]
http = net_http_class(env).new(url.host, url.inferred_port)
if http.use_ssl = (url.scheme == 'https' && env[:ssl])
ssl = env[:ssl]
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
http.cert = ssl[:client_cert] if ssl[:client_cert]
http.key = ssl[:client_key] if ssl[:client_key]
http.ca_file = ssl[:ca_file] if ssl[:ca_file]
http.cert_store = ssl[:cert_store] if ssl[:cert_store]
end
http.read_timeout = http.open_timeout = req[:timeout] if req[:timeout]
http.open_timeout = req[:open_timeout] if req[:open_timeout]
if :get != env[:method]
http_request = Net::HTTPGenericRequest.new \
env[:method].to_s.upcase, # request method
!!env[:body], # is there data
true, # does net/http love you, true or false?
url.request_uri, # request uri path
env[:request_headers] # request headers
if env[:body].respond_to?(:read)
http_request.body_stream = env[:body]
env[:body] = nil
end
end
begin
http_response = if :get == env[:method]
# prefer `get` to `request` because the former handles gzip (ruby 1.9)
http.get url.request_uri, env[:request_headers]
else
http.request http_request, env[:body]
end
rescue Errno::ECONNREFUSED
raise Error::ConnectionFailed, $!
end
http_response.each_header do |key, value|
response_headers(env)[key] = value
end
env.update :status => http_response.code.to_i, :body => http_response.body
@app.call env
end
end
end
end
Есть ли надежда этого 1.9. 2 вопрос «официально» разрешен? Я мог бы неправильно понять ответ ниже, но утверждение 'if' с« PATCH или HACK »кажется бесполезным (почему вообще есть оператор' if'?), И нет никаких объяснений о том, какова цель общего кода, кроме предотвращая ошибку. – ClosureCowboy
@closurecowboy, если вы посмотрите на ответ Алексея Кремера, он тщательно объясняет, почему эта ошибка происходит. Вы действительно хотите избежать решения, помеченного как ответ в вашем производственном коде, поскольку использование VERIFY_NONE отключает проверку сверток SSL-сертификатов. Я адаптировал его решение на странице wiki для Omniauth (https://github.com/intradea/omniauth/wiki/Setting-up-SSL-certificate-locations-in-Linux). Если вам или кому-то еще есть что добавить к нему, отредактируйте его, чтобы улучшить его. –
Общее решение для всех приложений Rails здесь http://stackoverflow.com/a/16983443/11792 –