外部APIを叩くのに、Docker使っていたらエラーが発生
SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate in certificate chain)
原因を調べるのに疲れた。
ローカル環境のみで発生するので真面目に対応するのも面倒。
本番はDocker使ってないし。
楽できる方法、探した。
解決策1
config/initailizersのファイルに以下を追記する。
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE if Rails.env.development?
参照:Rails5 devise twitterソーシャルログイン ローカル環境でのエラー解消
ただ、これだと、
・サーバー再起動が必要
・ローカル環境のログでalready initialized constant OpenSSL::SSL::VERIFY_PEER
的な警告がうざい
というデメリットがある。
もっと楽、したい。
テキトーに生きたい。
解決策2
def api(url)
uri = URI.parse(url)
req = Net::HTTP::Get.new(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == 'https')
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # これ追加。
res = http.start { |h| h.request(req) }
JSON.parse(res.body)
end
1行追加で動いた。
テキトーにif分岐追加しても1行で済む。