升级到OS10.14后,调用Httparty
时出现此错误
response = HTTParty.get('http://api.stackexchange.com/2.2/questions?site=stackoverflow')
objc[4182]: +[__NSPlaceholderDictionary initialize] may have been in progress in another thread when fork() was called.
objc[4182]: +[__NSPlaceholderDictionary 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 console之前已经尝试过export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
了。
但没有用。
5条答案
按热度按时间zpgglvta1#
在rails控制台之前运行变通命令是不够的。
以下解决方案对我有效(请遵循以下说明):
如果您遇到此错误,您可以将下面的代码添加到位于主目录中的.bash_profile中以修复此问题。
字符串
1.打开你的终端
1.键入cd ~导航到主目录
1.在编辑器中打开.bash_profile(代码为VS Code,atom为Atom,vim,nano等)
1.复制并粘贴在文件的export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES中(确保它位于文件底部的RVM部分上方!)
型
保存文件并退出所有编辑器和终端会话。重新打开您的编辑器,现在一切都应该正常工作。
我在此链接Kody Clemens Personal Blog找到了这个解决方案
ctzwtxfj2#
Ruby bug跟踪系统上有一个关于这个问题的帖子!
https://bugs.ruby-lang.org/issues/14009
基本上正如你可能已经知道的,在多线程环境中进行forking(但不执行)本质上是危险的,必须仔细编写环境来支持这样的事情。Apple的Objective-C库传统上根本不支持在forked(但不是exec'd)子进程中调用,但自High Sierra 10.13以来,他们试图添加对此的有限支持。然而,在这样做的同时,他们也定义了分叉后不允许的规则。其中一条规则规定,在分叉后不允许调用某些Objective-C类的initialize函数;这可能只发生在分叉之前。
到目前为止还说得通出现问题的原因有三:
Ruby本身并没有链接到任何Objective-C库,因此不会自己初始化Objective-C类。用户可以使用链接到Objective-C库的gem。由于这些gem的使用方式,可能会发生这些gem在应用服务器分叉后最终调用Objective-C初始化器的情况。新的Apple强制执行的规则检查,然后中止该过程,并发出如下警告:
字符串
就其本身而言,苹果的错误检查是有意义的。分叉是危险的。但所有这些因素加在一起就没什么意义了。在Ruby中添加一个解决方案(以确保在分叉之前调用Objective-C初始化器的形式)至少可以确保我们返回到High Sierra之前的行为。
线程中有很多解决方案,您需要针对您的环境/已安装gem的解决方案。
对我有用的是
export DISABLE_SPRING=true
9w11ddsr3#
我在操作系统莫哈韦和
ruby-2.4.0
上遇到了这个问题。我通过升级到ruby-2.4.4
使它工作。我也在这里给出了答案。使用gem ruby-oci 8的Oracle即时客户端无法与Rails c中的DB连接q3aa05254#
这个错误是在我升级到MacOS Monterey时开始的。
在你的终端
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
上运行,就像前面所说的,工作,你也可以通过在你的终端运行将这一行添加到你的.zshrc文件中:vim ~/.zshrc
个k2fxgqgv5#
简单地在终端中运行:
字符串
或者要永久修复,请将上述内容添加到
~/.zshrc
中