朝おきたらFaradayが動かなくなっていた時の備忘録
2022-01-18朝、自分がメンテしているアプリケーションでアラートが鳴っていて、何やら何かの yahoo-store-api 周りでエラーがでています。
あれ?と思い gem を試しに動かしてみると、
undefined method authorization for #<Faraday::Connection:0x0000000125df17d8 @parallel_manager=nil, @headers={}, @params={}, @options=#<Faraday::RequestOptions (empty)>
といったエラー。
あー初期化の時のメソッドが変わったのねー。という事で、
Faraday.new(url: ACCESS_TOKEN_ENDPOINT) do |c|
c.adapter Faraday.default_adapter
# ↓ココ
c.request :authorization, :Basic, Base64.strict_encode64("#{@application_id}:#{@application_secret}")
c.headers["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8"
end
今までc.authorization, :Basic
だったのを、c.request :authorization, :Basic
という形に変えてあげました。
これで動くかなーと思ったら、次は
:multipart is not registered on Faraday::Request (Faraday::Error)
あれ?multipart に関する部分も変わったの?と思って公式のドキュメントを検索してみると、multipart に関する事がそもそも見つからない。そんな事ある?
ん?他の機能どうなってる?と思い、調べてみると、今度は
uninitialized constant Faraday::UploadIO (NameError)
えー、もう全然いろんな部分動かなくなってるやん 🤢 Faraday::UploadIO は multipart-post gem に依存していると見かけたので、bundle show multipart-post
してみると、Could not find gem が返ってくると。
ここで落ち着いて faraday の GitHub を見てみると、UPGRADING.md というのがあるのを発見。
faraday/UPGRADING.md at main · lostisland/faraday
読んでみると、net_http 以外のアダプターはすべて別 gem に切り出して、faraday 本体はコア機能のみにして開発を集中すると。あー全然追えていませんでしたごめんなさい 🥲
あー、bundle update されて faraday のバージョンが 2.0 以上になったのが原因なので、解決方法としては、
- faraday のバージョンを 1.x に固定する
- 2.0 に上げて、faraday-multipart を利用する
の 2 つとなります。
ちょっと faraday を 2.0 にすると他に影響があるので、ひとまず 1.x でちゃんと動く事が分かったので、
spec.add_dependency "faraday", "~> 1.8.0"
に gemspec を変更し、2.x 系に変更するのは色々と様子を見て変えたいと思います 😌
それでは 🤟