【Ruby】[__NSPlaceholderDictionary initialize]〜エラー

バックエンド

Railsの案件の開発中にこちらのエラーが発生。

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

現象としては画像のアップロードをしとうよしたときにエラーが発生してアップロードができない、というものでした。gemのpaperclipでawsのs3にアップする仕組みです。よく見るとRails起動時にも同じエラーがログに出ていました。

環境

Ruby 2.4
Rails 5.0

原因はmacのアップデート?

原因はMacのようです。
参考:macOS High Sierra で “__NSPlaceholderDictionary initialize” エラー – Qiita
検索するとHigh Sierraで発生するという記事が多いですが、私の場合はHigh SierraからMojaveに上げたことで起こるようになりました。

対策は環境変数!

以下の環境変数を指定するとこのこと。

OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

アレ?うまくいかない…

環境変数を確実に設定したのですが解決しませんでした。bush_profileから読むようにしたり、再起動したりしてもダメ。 

いろいろ試した結果、以下のコマンドでrailsを立ち上げるとうまくいくことがわかりました。

OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES rails s

つまりrailsが環境変数を読めていないので、Rails起動時に環境変数を与えてあげれば良いということです。しかし普段はRubyMineのデバック実行でRailsを起動しています。RubyMineから実行するときはどうすれば…?

RubyMine向けの対策

大先輩がRubyMineのrailsの起動引数を設定する方法を教えてくれました!

1.rubyMine > Run > Edit Configurations

2. Environment variablesのところに環境変数を設定する 

これで解決!

タイトルとURLをコピーしました