Ruby on Rails 5.2.4使用google-cloud-translate本地运行报错求助
报错原因
这个错误是macOS High Sierra 及以上版本独有的系统级安全限制导致的,生产环境Heroku使用Linux系统不存在该限制,因此代码可以正常运行。
苹果在高版本macOS中为Objective-C运行时增加了fork安全校验:如果父进程已经存在处于运行状态的Objective-C线程,fork产生的子进程再尝试初始化Objective-C类时就会触发该崩溃。google-cloud-translate gem底层依赖的gRPC库在Mac环境下会调用系统层面的Objective-C网络接口,而Rails控制台默认会通过fork子进程的方式执行部分代码,二者叠加就触发了该系统校验报错。
解决方案
- 临时生效(仅当前终端会话有效):
启动Rails控制台前,先在当前终端执行命令:export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
之后再启动Rails控制台执行代码即可正常运行。 - 永久生效(当前用户所有终端会话有效):
将上述环境变量写入终端配置文件:- 如果你使用zsh:写入
~/.zshrc文件 - 如果你使用bash:写入
~/.bash_profile或~/.bashrc文件
写入内容为:
保存后执行export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YESsource 对应配置文件路径即可立即生效,后续不需要再手动设置。 - 如果你使用zsh:写入
- 项目级生效:
如果你使用dotenv等工具管理项目环境变量,可以直接在项目的.env文件中添加上述环境变量配置,启动Rails项目时会自动加载,不会影响其他项目的运行。
注:该环境变量仅对macOS系统生效,提交到Linux生产环境不会产生任何副作用,可以放心配置。
内容的提问来源于stack exchange,提问作者Gotey
相关产品推荐
相关产品推荐

