ruby-on-rails - Ruby 的 mysql2 gem 使用了不正确的数据库包(MariaDB 而不是 MySQL)
问题描述
使用 Windows 10 x64 和 Ruby 2.7.4,尝试安装 mysql2 0.5.3 gem。正常安装失败,所以我手动链接库。这个 gem 是使用 MySQL 的 C API (C Connector) v 6.1.11 编译的,所以我下载它并使用--with-mysql-dir
选项 during指定它gem install
,如下所示:
gem install mysql2 --platform=ruby -- --with-mysql-dir="C:\Program Files\MySQL\MySQL Connector C 6.1"
但是,尝试使用此 gem 执行程序会产生以下错误:
Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5. (RuntimeError)
可疑,因为 MySQL 项目中没有 10.5.5 版本。最后,我在安装 gem 的过程中意识到以下行:
Using msys2 packages: mingw-w64-x86_64-libmariadbclient
事实上,MariaDB 的最新版本之一是 10.5.5。为什么使用这个包,而不是我指定的包,以及如何修复它?
谢谢。
解决方案
如果您没有明确指定它们,MSYS 2 似乎会自动安装 lib 文件。它们实际上应该已经包含在连接器中,因此这可能会解决您的问题:
$ gem install mysql2 --platform=ruby --
'--with-mysql-lib="C:\C:\Program Files\MySQL\MySQL Connector C 6.1\lib"
--with-mysql-include="C:\Program Files\MySQL\MySQL Connector C 6.1\include"
--with-mysql-dir="C:\Program Files\MySQL\MySQL Connector C 6.1"'
推荐阅读
- angular - 服务继续运行,但按钮状态发生变化
- python - 如何在 django 后端访问 html 元素 ID?
- javascript - 使用主窗口中的预连接资源提示来提高外部 iframe 中脚本的性能
- python - 为什么相关的 create() 使用 Django ORM 检查 id?
- arrays - 将元素推送到存储在 Julia 中的 jld2 文件中的数组中
- variables - Maximo:MAXVARS 的目的是什么?
- c++ - 为什么当我使用“for循环”时会显示队列的内容,而当我使用“while循环”时却没有?
- python - 使用 Pandas 根据列值过滤掉行值
- contiki - 在等待 contiki 中的事件时,执行被转移到第二个进程
- laravel-5 - 直接在 ORM Laravel 上存储对象?