Apple Silicon 上的 Rails 和 MySQL

Esk*_*im0 13 mysql homebrew ruby-on-rails mysql2 apple-silicon

有谁能够通过 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
Run Code Online (Sandbox Code Playgroud)

谢谢你!

Mat*_*tW. 20

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

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 
Run Code Online (Sandbox Code Playgroud)

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

值得注意的是,这适用于最新版本的 mysql,不需要任何 Intel 版本或使用 HomeBrew 的模拟版本(例如ibrew)。

配置 Bundler 自动使用此构建配置:

您可能还想将此配置设置为mysql2. 这样,每当捆绑程序必须重新安装mysql2(在此项目或同一计算机上的任何其他项目上)时,它将自动使用此配置。您可以通过以下方式做到这一点:

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 
Run Code Online (Sandbox Code Playgroud)


mtr*_*lle 19

根据@matthias-winkelmann的答案,使用brew为您找到正确的mysql版本:

gem install mysql2 -v '0.5.3' -- \
--with-mysql-lib=$(brew --prefix mysql)/lib \
--with-mysql-dir=$(brew --prefix mysql) \
--with-mysql-config=$(brew --prefix mysql)/bin/mysql_config \
--with-mysql-include=$(brew --prefix mysql)/include 
Run Code Online (Sandbox Code Playgroud)

mysql2请注意我在这里提到的 gem的具体版本。

  • 这对我在全新的 M1 Pro mac 上有效!全新自制安装。酿造安装rbenv。rbenv 安装 3.1.0。酿造安装mysql。酿造安装openssl。酿造安装zstd。然后是上面的:-)然后是通常的胡闹 (2认同)

Esk*_*im0 0

经过多次尝试和搜索,我有了一个可行的答案。首先,您必须在 M1 Mac 上安装两个brew——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
Run Code Online (Sandbox Code Playgroud)

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

 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"
Run Code Online (Sandbox Code Playgroud)

您可能需要根据版本号进行调整 - 当您让它工作时,将其放入 ~/.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)"
Run Code Online (Sandbox Code Playgroud)

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