Apple Silicon 上的 Rails 和 MySQL

问题描述

是否有人能够通过 Apple Silicon 上的 MysqL2 gem 使 Rails 与 MysqL 一起运行?我正在使用 Ruby 2.5.3 和 Rails 5.2.3,但很想听到任何版本的成功。目前我遇到了 MysqL2 gem 安装失败的问题:

linking shared-object MysqL2/MysqL2.bundle
ld: library not found for -lssl
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
make: *** [MysqL2.bundle] Error 1

谢谢!

解决方法

我仅在以下方面取得了成功:

rbenv exec gem install mysql2 -- \
--with-mysql-lib=/opt/homebrew/Cellar/mysql/8.0.25_1/lib \
--with-mysql-dir=/opt/homebrew/Cellar/mysql/8.0.25_1 \
--with-mysql-config=/opt/homebrew/Cellar/mysql/8.0.25_1/bin/mysql_config \
--with-mysql-include=/opt/homebrew/Cellar/mysql/8.0.25_1/include 

(请注意,您可能需要更改这些路径中的版本号)

值得注意的是,这适用于最新版本的 mysql,不需要任何 Intel 版本或 ibrew。

,

经过多次尝试和大量搜索,我有了一个可行的答案。首先,您必须在 M1 Mac 上安装两个 brews-arm 下的 homebrew 和模拟 x86 下的 homebrew (ibrew)。参见https://soffes.blog/homebrew-on-apple-silicon。然后,我能够在仿真下安装mysql@5.7,以及openssl。这是必需的,因为 mysql2 似乎正在模拟下编译,并且正在引用这些库。

ibrew install mysql@5.7
ibrew install openssl

然后我需要将 mysql 及其库添加到我的路径中。

 export PATH="/opt/homebrew/bin:/usr/local/bin:/opt/homebrew/opt/mysql:/opt/homebrew/opt/mysql/lib:/usr/local/Cellar//mysql@5.7//5.7.34:/usr/local/Cellar//mysql@5.7//5.7.34/lib:/usr/local/Cellar//mysql@5.7//5.7.34/bin:$PATH"

您可能需要根据版本号对其进行调整 - 当您运行时将其放入您的 ~/.zshrc 或其他 shell 初始值设定项文件中。

然后我就可以安装带有这些标志的 mysql2 gem:

 gem install mysql2 -V -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include --with-opt-dir="$(ibrew --prefix openssl)"

我不是 C 编码员,所以我不完全了解 mysql2 如何链接到 mysql 库的详细信息。我更喜欢在 ARM 下使用可用的 mysql,期望它必须运行得更快,但不知道如何让它链接起来。