我正在尝试使用通过homebrew安装的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
2条答案
按热度按时间bqjvbblv1#
我整天都在思考这个问题,这就是我解决这个问题的方法。我不能100%肯定我说的一件事是准确的,但我已经能够通过以下操作运行Ruby和mysql2的多个版本:
1.确保您运行的是自制软件3.0.0(支持Apple芯片)
2.我使用rbenv作为版本管理器,并通过自制程序安装
brew install rbenv
3.安装mysql2 gem所需的一些库
brew install mysql openssl zstd readline
我提前做了这个,这样我就可以在所有其他命令中使用brew前缀。注意,在M1上,自制程序安装的默认位置已经从
/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
这些是我采取的步骤,让宝石安装和工作正确。尽了我最大的努力,我的第一个如此职位,但请让我知道,如果我需要做任何不同的在这里或下次。
编辑:
对于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宝石(版本早于1. 14. 2)之后,这阻止了我再次运行
db:create
。我还没有找到真实的的解决方案(那对我有用)解决这个问题了吗(外面有很多帖子),而且,由于时间限制,刚刚编辑了Gemfile.lock以使用ffi版本1. 15. 5。不知道这会给我带来什么样的麻烦(不签入),但需要尽快“修复”这个问题。hgc7kmma2#
感谢克利夫顿的详细回答。
在我的情况下,我只是不得不重新安装我的系统适合新的硅芯片,特别是ruby,见github