![](/img/trans.png)
[英]Problem using MySQLdb on OSX: symbol not found _mysql_affected_rows
[英]Problem when creating mysql database on M1 mac: symbol not found in flat namespace '_mysql_affected_rows
我正在尝试使用通过自制软件安装的 mysql@5.7 为我的 rails 项目创建一个数据库。 安装成功,但是当我尝试运行时: bin/rake db:create
。 发生错误:
LoadError: dlopen(/Users/matthewluong/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/mysql2-0.4.9/lib/mysql2/mysql2.bundle, 0x0009):
symbol not found in flat namespace '_mysql_affected_rows' - /Users/matthewluong/.rbenv/versions/2.7.4/lib/ruby/gems/2.7.0/gems/mysql2-0.4.9/lib/mysql2/mysql2.bundle
lib/tasks/db_config.rake:26:in `block in <top (required)>'
我的mysql2版本是0.4.9
我整天都在努力解决这个问题,这就是我解决问题的方法。 我不是 100% 肯定我所说的一件事是准确的,但我已经能够通过执行以下操作来运行 Ruby 和 mysql2 的多个版本:
1. 确保您运行的是 homebrew 3.0.0(支持 Apple 芯片)
2. 我使用 rbenv 作为我的版本管理器并通过 homebrew 安装
brew install rbenv
3. 安装 mysql2 gem 需要的一些库
brew install mysql openssl zstd readline
我提前这样做了,所以我可以为所有其他命令使用 brew 前缀。 请注意,在 M1 上,homebrew 安装的默认位置已从/usr/local/opt/
更改为/opt/homebrew/opt/
因此,如果您不使用 brew 前缀并且您正在尝试其他解决方案的组合,请检查旧/user/local/opt/
路径的命令并将其换成新路径,否则如果没有一些手动配置,它将无法工作。
4. Ruby安装
CFLAGS="-Wno-error=implicit-function-declaration" RUBY_CONFIGURE_OPTS='--with-readline-dir=/opt/homebrew/opt/readline' rbenv install 2.7.4
5. mysql2 gem 安装
安装 Ruby 后,切换到该版本或您正在处理的项目并运行bundle install
。 您可能会收到有关 mysql2 失败的错误,并要求您确保在再次捆绑之前安装了 gem。
我解决了这个问题:
gem install mysql2 -v '0.5.3' -- --with-mysql-config=$(brew --prefix mysql@5.7)/bin/mysql_config --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include
这些是我为安装 gem 并正常工作所采取的步骤。 我为我的第一个 SO 帖子尽了最大努力,但如果我需要在这里或下次做任何不同的事情,请告诉我。
编辑:
对于 Ruby 2.4.5,我需要一个稍微不同的 mysql2 gem 命令:
rbenv exec gem install mysql2 -- --with-mysql-lib=$(brew --prefix mysql@5.7)/lib --with-mysql-dir=$(brew --prefix mysql@5.7) --with-mysql-config=$(brew --prefix mysql@5.7)/bin/mysql_config --with-mysql-include=$(brew --prefix mysql@5.7)/include --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include
在那之后,我也遇到了 ffi gem(版本早于 1.14.2)的错误,这阻止了我再次运行db:create
。 我还没有找到解决这个问题的真正解决方案(对我有用)(那里有很多帖子),并且由于时间限制,我只是编辑了 Gemfile.lock 以使用 ffi 版本 1.15.5。 不知道这会给我带来什么样的麻烦(不检查),但需要快速“修复”这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.