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のところに環境変数を設定する

これで解決!