概要
Faraday
のアダプターとして:typhoeus
が使用されている処理を実行した際にrails c
が強制終了してしまったので対応方法を調べた。
ターミナルには以下のような表示。
objc[18501]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.
こんな感じで設定されたhttpクライアントのクラスでgetリクエストをしたら発生した。
|
|
各種バージョン
- ruby 2.6.3
- Rails 5.2.5
- macos 12.5
- typhoeus 1.4.0
https://github.com/typhoeus/typhoeus - faraday 1.10.3
https://github.com/lostisland/faraday
対応方法
検索すると以下のPRが見つかった。
https://github.com/rails/rails/issues/38560
発生した状況は異なるが、内容的には同じっぽい。
コメントに記載されていた対処法を試した。
やったこと
ターミナルの環境変数を追加
$ export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
$ env | grep 'OBJC_DISABLE_INITIALIZE_FORK_SAFETY'
OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
springを停止
$ spring stop
環境変数を追加しただけでは解消しなかったので、環境変数が読み込まれてなさそうと思い再起動のため停止。
コンソールを再起動
$ rails c
再度同じ処理を実行すると正常に動作した。
その他
issueのコメントを見ていると、発生原因としては古いrubyをmacで動かしたことが問題っぽい。
https://github.com/rails/rails/issues/38560#issuecomment-1099874061
(新しいrubyでは試してない)
古いプロジェクトでテストもない状況だったので、アップデートするのは危険と思い一時的な対処となった。faraday
2系へのメジャーアップデートが必要なのも気になる。
ミドルウェア関係が結構変わるので、個別に状況を確認する必要がありそう。
https://github.com/lostisland/faraday/blob/main/UPGRADING.md
アップグレードに関して詳細に記載されているので助かる。