在M1 mac上创建mysql数据库时出现问题:在平面命名空间'_mysql_affected_rows'中找不到符号

smdncfj3  于 2023-03-11  发布在  Mysql
关注(0)|答案(2)|浏览(359)

我正在尝试使用通过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

bqjvbblv

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

  • CFLAGs参数是不中断编译器警告的构建(仍然在错误时中断),readline参数为我们获取刚刚安装的homebrew版本。
  • 我只在最近的2. 4. 5中成功地使用了这个Ruby命令。我仍然在1. 9. 3 p392上工作(旧项目,不是我的错)。
    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

  • 基本上,我们在这里所做的是使用homebrew安装的mysql5.7的config,并为zstd和openssl设置ld和cpp标志。

这些是我采取的步骤,让宝石安装和工作正确。尽了我最大的努力,我的第一个如此职位,但请让我知道,如果我需要做任何不同的在这里或下次。
编辑:
对于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。不知道这会给我带来什么样的麻烦(不签入),但需要尽快“修复”这个问题。

hgc7kmma

hgc7kmma2#

感谢克利夫顿的详细回答。
在我的情况下,我只是不得不重新安装我的系统适合新的硅芯片,特别是ruby,见github

相关问题