使用 Ruby 2.6.4 和 mysql2 0.5.3 (arm64) 构建 Rails 应用程序时如何修复 LoadError(“在平面命名空间 mysql_affected_rows 中找不到符号”)

问题描述 投票:0回答:2

我正在 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-on-rails ruby apple-m1 arm64 mysql2
2个回答
0
投票

由于使用 Homebrew for ARM 安装 MySQL 5.7,我的 Mac M2 也遇到了类似的问题。以下是我修复此问题的步骤,以防它可以帮助某人:

  • 使用 Rosetta 访问终端:

    • 完全关闭终端
    • 导航到应用程序 > 实用程序 > 终端
    • 按住 Ctrl 键并单击并选择“获取信息”
    • 勾选“使用 Rosetta 打开”
  • 打开终端并安装适用于 x86_64 的 Homebrew:

    arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

  • 添加别名:

    • 在 ARM 和 x86_64 之间切换架构
      • 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
    • 对于ARM使用brew,对于x86_64使用brew
      • 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 打开”...


0
投票

如果您使用的是配备 Intel 芯片的 Mac,您也会遇到此错误。这是因为 Puma 5 与 OpenSSL 3 不兼容。要解决此问题,请导航至 Gemfile 并删除 Puma 的版本规范。这会提示安装高于5的Puma版本,有效解决问题。

gem 'puma'
© www.soinside.com 2019 - 2024. All rights reserved.