JavaScriptを有効にしてください

[Ruby]typhoeusを使用する際にコンソールが終了してしまうことへの対応

 ·  ☕ 2 分で読めます

概要

Faradayのアダプターとして:typhoeusが使用されている処理を実行した際にrails cが強制終了してしまったので対応方法を調べた。
ターミナルには以下のような表示。

 objc[18501]: +[__NSCFConstantString initialize] may have been in progress in another thread when fork() was called.

こんな感じで設定されたhttpクライアントのクラスでgetリクエストをしたら発生した。

1
2
3
4
Faraday.new do |builder|
  builder.request :url_encoded
  builder.adapter :typhoeus
end 

各種バージョン

対応方法

検索すると以下の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では試してない)
古いプロジェクトでテストもない状況だったので、アップデートするのは危険と思い一時的な対処となった。
faraday2系へのメジャーアップデートが必要なのも気になる。
ミドルウェア関係が結構変わるので、個別に状況を確認する必要がありそう。
https://github.com/lostisland/faraday/blob/main/UPGRADING.md
アップグレードに関して詳細に記載されているので助かる。


書いた人
keee
Webエンジニア

目次