You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

M2芯片迁移后运行rails s遇mysql2报错_symbol not found求助

M2芯片迁移后Rails启动mysql2符号缺失问题解决

环境信息

  • Rails:7.0.3
  • MySQL:5.7.29
  • Ruby:3.1.1
  • Rvm:1.29.12
  • mysql2:0.5

报错详情

执行rails s时触发错误:

require': dlopen(/Users/list/.rvm/rubies/ruby-3.1.1/lib/ruby/gems/3.1.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle, 0x0009): symbol not found in flat namespace (_mysql_affected_rows)

已尝试的无效操作

  • 配置bundle编译参数:
    bundle config build.mysql2 "--with-ldflags=-L/usr/local/mysql/lib --with-cppflags=-I/usr/local/mysql/include"
    
  • 指定参数重新安装mysql2:
    gem install mysql2 -v '0.5' -- --with-mysql-config=/usr/local/mysql/bin/mysql_config --with-ldflags="-L/usr/local/mysql/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include
    

可行解决方案

1. 替换为ARM架构适配的MySQL版本

MySQL 5.7.29默认可能无原生ARM包,卸载现有版本后从源码编译安装:

brew uninstall mysql@5.7
brew install openssl@1.1
brew install mysql@5.7 --build-from-source

2. 清理旧配置,重新编译安装mysql2

先清除之前的bundle编译配置:

bundle config unset build.mysql2

再用适配的路径参数安装mysql2:

gem install mysql2 -v '0.5.4' -- --with-mysql-config=$(brew --prefix mysql@5.7)/bin/mysql_config --with-ldflags="-L$(brew --prefix mysql@5.7)/lib -L$(brew --prefix openssl@1.1)/lib" --with-cppflags="-I$(brew --prefix mysql@5.7)/include -I$(brew --prefix openssl@1.1)/include"

最后更新项目依赖:

bundle install

3. 确保Ruby为ARM架构编译版本

检查当前Ruby架构:

ruby -e "puts RUBY_PLATFORM"

若输出不是arm64-darwinXX,重新编译Ruby:

rvm uninstall ruby-3.1.1
rvm install ruby-3.1.1 --with-openssl-dir=$(brew --prefix openssl@1.1)

4. 验证动态库链接正确性

检查mysql2.bundle的依赖库路径:

otool -L /Users/list/.rvm/rubies/ruby-3.1.1/lib/ruby/gems/3.1.0/gems/mysql2-0.5.4/lib/mysql2/mysql2.bundle

确认输出中的MySQL和OpenSSL库路径均为ARM版本的安装路径。

内容的提问来源于stack exchange,提问作者zxl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:39:22