苹果芯片上的Rails和MySQL

12

有人能在苹果芯片上使用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

谢谢你!

4个回答

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 

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

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

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

您也可以将此配置设置为mysql2的默认配置。这样,每当bundler必须重新安装mysql2(在该项目或同一台计算机上的任何其他项目上),它都会自动使用此配置。 您可以使用以下命令完成此操作:

bundle config set --global build.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特定版本,将8.0.25_1更改为8.0.26。但其余部分都很好用。专业提示:我会实际配置Bundler以全局使用它,这样在需要重新安装gem的情况下,它将自动使用此配置。我已经使用这种方法修改了您的答案。 - Joshua Pinter

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 

请注意我在这里提到的mysql2 gem的特定版本。


2
这对我在全新的M1 Pro Mac上起作用了!全新的Homebrew安装。 brew install rbenv. rbenv install 3.1.0. brew install mysql. brew install openssl. brew install zstd.然后就是上面的内容 :-) 然后进行通常的调试以使其正常运行。 - firecall

3
我正在使用M1-14inc的Montery 12.1版本。
使用brew安装环境。
brew install openssl
brew install zstd

导出环境数据

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix zstd)/lib/
export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix openssl@1.1)/lib/

安装mysql

gem install mysql2 -v '0.5.3' \
  --source 'https://rubygems.org/' -- \
  --with-cppflags=-I/usr/local/opt/openssl/include \
  --with-ldflags=-L/usr/local/opt/openssl/lib

我遇到了如下错误: enter image description here 我尝试使用以下方法,它可以正常工作:
gem install mysql2 -v 0.5.3 -- --srcdir=/usr/local/mysql/include

更新

我找到了一个简单快捷的解决方案。

arch -x86_64 gem install mysql2 -v 0.5.3 -- --srcdir=/usr/local/mysql/include

参考资料:https://dev59.com/RFcO5IYBdhLWcg3wpTKW#71006010


(该链接为英文原文,请自行前往查看)

1
这对我有用,谢谢。 - Cheyne

0

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

ibrew install mysql@5.7
ibrew install openssl

然后我需要将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"

根据版本号,您可能需要微调此设置 - 当您使其正常工作后,请将其放入您的~/.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,期望它能够运行得更快,但不确定如何进行链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接