Ruby 3.0需要OpenSSL1.1版,这个版本现在已经很旧了,在很多环境中都不受支持.建议你升级这款应用,使其至少能在Ruby 3.1上运行,Ruby 3.1使用的是最新的OpenSSL版本.
这就是说,在OSX上,你仍然可以使用homebrew
、rbenv
和ruby-build
来运行它.请注意,指南将使用rbenv
作为Ruby管理器,如果您使用其他名称(如rvm
),则需要更改一些指南以满足这一要求.(或者卸载它,然后换成rbenv
)
请注意,下面的指南将安装Ruby 3.0.6,而不是3.0.4.你可能应该转移到这个版本,因为这是3.0.x分支中的最新版本,它应该仍然不会 destruct 你现有的应用程序.
还请注意,如果需要,下面的步骤也应该适用于Ruby 2.7.我们在2.6版本中取得了一些成功,但我不记得还有其他一些步骤需要它才能运行.
确保您安装了homebrew个.不过,如果您在Mac上进行开发,应该是标准配置.
假设你还没有安装ruby管理器,安装并设置rbenv
:
brew install rbenv
if [ -n "$ZSH_VERSION" ]; then
SHELL_CONFIG_FILE_PATH=~/.zshrc
elif [ -n "$BASH_VERSION" ]; then
SHELL_CONFIG_FILE_PATH=~/.bashrc
else
SHELL_CONFIG_FILE_PATH=~/.profile
fi
echo "eval '$(rbenv init -)'" >> $SHELL_CONFIG_FILE_PATH
echo "export PATH='$HOME/.rbenv/bin:$PATH'" >> $SHELL_CONFIG_FILE_PATH
source $SHELL_CONFIG_FILE_PATH
如果你使用其他的东西,比如rvm
或chruby
,那么你可以跳过上面的步骤,不过请注意,ruby-build
和rbenv
一起使用效果最好.
- -对不起,先生.
brew install ruby-build
- 安装OpenSSL1.1:
brew install openssl@1.1
- 使用正确的OpenSSL版本安装Ruby:
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
rbenv install 3.0.6
注意,如果您不使用rbenv
,那么您必须在本地使用ruby-Build:
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"
ruby-build 3.0.6 /opt/rubies/3.0.6
然后将您的另一个Ruby管理器配置为指向此版本的Ruby.
- 设置一些符号链接(可选,但某些gem需要.只有在遇到其他问题时才执行此操作,因为它可能会 destruct 在较新的OpenSSL版本上运行的应用程序):
对于在Rosetta下运行的英特尔Mac或Homebrew:
ln -sf /usr/local/opt/openssl@1.1/lib/libcrypto.dylib /usr/local/lib/libcrypto.dylib
ln -sf /usr/local/opt/openssl@1.1/lib/libssl.dylib /usr/local/lib/libssl.dylib
对于ARM mac:
ln -sf /opt/homebrew/opt/openssl@1.1/lib/libcrypto.dylib /usr/local/lib/libcrypto.dylib
ln -sf /opt/homebrew/opt/openssl@1.1/lib/libssl.dylib /usr/local/lib/libssl.dylib
- 手动为您的Ruby 安装
openssl
Ruby :
rbenv local 3.0.6
gem install openssl -v '2.2.3' -- --with-openssl-dir=$(brew --prefix openssl@1.1)
(对Bundle 包文件中的每个openssl
gem版本执行此操作)
- Ruby 的问题.
一些gem可能需要链接到不同的openssl,如果是这样的话,您可以使用下面的方法.例如,我们在puma
和eventmachine
上遇到了问题:
brew install openssl@3 openssl
bundle config set --global build.eventmachine --with-ssl-dir=$(brew --prefix openssl@3)
bundle config set --global build.puma --with-openssl-dir=$(brew --prefix openssl@3)
这些步骤应该可以让你在英特尔和ARM Mac的Sonoma上通过并在2024年1月仍然有效.
另外,如果你需要安装一个更新的ruby,同时保持对3.0.6的支持,你应该使用:用途:
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)"
rbenv install 3.1.4
# works with 3.2 and 3.3 as well