我正在 Mac M1 机器上开发 Ruby on Rails 应用程序。以前,我能够在 Ruby 2.5.5 和 mysql2 0.5.1(均在 arm64 中)上构建相同的应用程序,但发生了升级,现在当我运行
bundle exec rails server
时,我收到此错误:
require': dlopen(/vendor/bundle/ruby/2.6.0/extensions/-darwin-21/2.6.0/mysql2-0.5.3/mysql2/mysql2.bundle, 0x0009): symbol not found in flat namespace (\_mysql_affected_rows) - /vendor/bundle/ruby/2.6.0/extensions/-darwin-21/2.6.0/mysql2-0.5.3/mysql2/mysql2.bundle (LoadError)\
到目前为止我已经:
验证安装的Ruby 2.6.4和mysql都在arm64上
brew --prefix mysql
返回/opt/homebrew/opt/mysql
)尝试设置不同的捆绑配置([电子邮件受保护]和[电子邮件受保护])
例如,在
.bundle/config
中我添加了:
BUNDLE_BUILD__MYSQL2: "--with-mysql-lib=/opt/homebrew/opt/[email protected]/lib --with-mysql-dir=/opt/homebrew/opt/[email protected] --with-mysql-config=/opt/homebrew/opt/[email protected]/bin/mysql_config --with-mysql-include=/opt/homebrew/opt/[email protected]/include --with-ldflags=-L/opt/homebrew/opt/[email protected]/lib --with-cppflags=-I/opt/homebrew/opt/[email protected]/include"
我也尝试过跑步:
gem install mysql2 -v '0.5.3' -- --with-mysql-lib=/usr/local/opt/[email protected]/lib --with-mysql-dir=/usr/local/opt/[email protected] --with-mysql-config=/usr/local/opt/[email protected]/bin/mysql_config --with-mysql-include=/usr/local/opt/[email protected]/include --with-ldflags=-L/usr/local/opt/[email protected]/lib --with-cppflags=-I/usr/local/opt/[email protected]/include
删除
/vendor/bundle/ruby/2.6.0
文件夹(包含所有依赖项)并重做 bundle install
重新安装Ruby 2.6.4 arm64
重新安装mysql arm64
在所有这些尝试之后,我仍然遇到相同的加载错误><
由于使用 Homebrew for ARM 安装 MySQL 5.7,我的 Mac M2 也遇到了类似的问题。以下是我修复此问题的步骤,以防它可以帮助某人:
使用 Rosetta 访问终端:
打开终端并安装适用于 x86_64 的 Homebrew:
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
添加别名:
echo 'alias arm="env /usr/bin/arch -arm64 /bin/zsh --login"' >> ~/.zshrc
echo 'alias intel="env /usr/bin/arch -x86_64 /bin/zsh --login"' >> ~/.zshrc
echo 'alias mbrew='arch -arm64e /opt/homebrew/bin/brew'' >> ~/.zshrc
echo 'alias ibrew='arch -x86_64 /usr/local/bin/brew'' >> ~/.zshrc
完全关闭终端,取消选中“使用Rosetta打开”并再次重新打开终端
mbrew remove [email protected]
intel
ibrew install [email protected]
gem install mysql2 -v x.x.x -- --with-mysql-config=/usr/local/opt/[email protected]/bin/mysql_config --with-ldflags=-L/usr/local/opt/[email protected]/lib --with-cppflags=-I/usr/local/opt/[email protected]/include
您现在可以通过运行
arm
返回 ARM 控制台,完全关闭终端并再次勾选“使用 Rosetta 打开”...
如果您使用的是配备 Intel 芯片的 Mac,您也会遇到此错误。这是因为 Puma 5 与 OpenSSL 3 不兼容。要解决此问题,请导航至 Gemfile 并删除 Puma 的版本规范。这会提示安装高于5的Puma版本,有效解决问题。
gem 'puma'