You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS Monterey12.4上用Rails的Searchkick执行Model.reindex时遇fork()错误

解决macOS Monterey下Searchkick执行Model.reindex时的objc fork崩溃问题

问题场景

在macOS Monterey 12.4本地控制台中,使用Rails的Searchkick(基于ElasticSearch)执行Model.reindex操作时,触发以下错误:

ETHON: Libcurl initialized
objc[36397]: +[NSNumber initialize] may have been in progress in another thread when fork() was called.
objc[36397]: +[NSNumber initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

解决方案

临时终端修复

在启动Rails控制台前,先设置环境变量禁用objc的fork安全检查:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

之后再执行rails c进入控制台,执行Model.reindex即可正常运行。

永久配置生效

如果不想每次手动设置环境变量,可将配置添加到shell配置文件:

  • 若使用Bash,编辑~/.bash_profile或~/.bashrc,添加:
    export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
    
  • 若使用Zsh,编辑~/.zshrc,添加上述内容后,执行source ~/.zshrc使配置立即生效。

项目内配置

也可以直接在Rails项目中配置该环境变量,在config/initializers/searchkick.rb中添加:

ENV['OBJC_DISABLE_INITIALIZE_FORK_SAFETY'] = 'YES'

原因说明

这个错误是macOS Monterey引入的Objective-C类初始化安全机制导致的:当进程执行fork()时,如果父进程中有线程正在执行类的initialize方法,子进程会触发崩溃。禁用该安全检查可绕过此问题,在开发环境中完全安全。

内容的提问来源于stack exchange,提问作者diasks2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:15:30