`mysql2` gem- 如何 运行 基准文件?

`mysql2` gem- how to run benchmark files?

OSx v12.4
Ruby v2.6.0
XCode v13.4.1
`mysql2` gem, SHA e9c662912dc3bd3707e6c7f0c75e591294cffe12

我克隆了 mysql2 存储库,我正在尝试从根目录 运行 ruby benchmark/active_record.rb。我收到以下错误:

/Users/richiethomas/.rbenv/versions/2.6.0/lib/ruby/gems/2.6.0/gems/activesupport-
6.1.6/lib/active_support/dependencies.rb:332:in `require': Could not load the 'mysql' 
Active Record adapter. Ensure that the adapter is spelled correctly in 
config/database.yml and that you've added the necessary adapter gem to your Gemfile. 
(LoadError)

我在回购的 Gemfile 中看到以下内容:

group :benchmarks, optional: true do
  gem 'activerecord', '>= 3.0'
  gem 'benchmark-ips'
  gem 'do_mysql'
  gem 'faker'
  # The installation of the mysql latest version 2.9.1 fails on Ruby >= 2.4.
  gem 'mysql' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.4')
  gem 'sequel'
end

我尝试了 运行ning bundle install --with=benchmarks,并成功完成,但是它没有安装 mysql ActiveRecord 适配器,因为我的 Ruby 版本是 2.6.0 .

虽然我知道这不是必需的,但我尝试按照 the gem's README.md file:

通过以下命令安装 mysql gem
gem install mysql2 -- --with-mysql-dir=-/usr/local/opt/mysql@5.7

然而,我得到:

library not found for -lssl
clang: error: linker command failed with exit code 1

我还尝试按照 :

使用以下命令安装 mysql
gem install mysql -- --with-ldflags=-L/usr/local/opt/openssl/lib

但是,我收到与 rb_cFixnum 相关的错误,我推测这是因为 Fixnum class 在我的 Ruby 版本中不存在(似乎2.4.0 已经被淘汰了,我现在是 2.6.0)。在这两个错误之间,我觉得我可以排除错误是由缺少 mysql gem.

引起的可能性

如果根本问题是链接器文件过时,我已将 OS 和 XCode 更新为截至今天可用的最新版本。以上错误发生在我完成这个更新过程后。

我的问题有两个:

  1. 我注意到错误消息引用了 config/database.yml,我习惯在我的 Rails 项目中看到它,但我在 mysql2回购。这是否意味着如果有关联的 database.yml 文件,我只能 运行 基准?如果是这样,我将如何 运行 来自(例如)“Hello World”类型 Rails 项目的这些基准?

  2. 如果我无法将 mysql gem 与高于 2.4.0 的 Ruby 版本一起安装,为什么 benchmarks/active_record.rb 文件似乎依赖于它在 this line of code 中的存在?无论我的 Ruby 版本如何,我都希望能够 运行 基准文件。

我认为您不应该假设基准测试可以 运行 而不对基准代码进行一些手动编辑和更正。例如,文件 setup_db.rb 包含您显然需要编辑的硬编码凭据。

另请注意,您必须先 运行 安装文件,然后再 运行 任何其他内容。例如,active_record.rb 文件似乎正在使用 mysql2_test table 中的数据,这些数据是通过 setup_db.rb.

创建的

您对 database.yml 的引用只是来自 Rails 代码库的标准错误消息。这并不意味着您需要此文件进行测试。事实上,您很可能需要编辑 active_record.rb 文件中的 opts 行,以指向可以连接到与您在 setup_rb.rb 中初始化的内容兼容的数据库。

另外我会跳过 mysql gem 并尝试使用 mysql2 运行 如果您已经安装了它。为此,您必须从测试代码中删除对 mysql 的任何引用。

如果您在 Rubygem 上查看 mysql gem,the latest version is from 2013。在任何现代 Ruby 版本上,您都不太可能获得 运行。这也暗示了基准代码最有可能过时的程度。

通过查看基准文件夹中文件的 git 历史记录,可以看到 out-of-date 的更多提示。它们自 2017 年以来就没有更新过。

总结:

您必须编辑基准代码才能使其正常工作。代码 看起来不像是在普遍的火灾中建立起来的,忘记了 方式,很可能已经过时了。

不要安装 mysql,而是安装 mysql2。对于相关问题 mysql2个安装问题,最好post出新问题。