【问题标题】:How to connect Ruby on Rails to MySQL using ruby-mysql [closed]如何使用 ruby​​-mysql 将 Ruby on Rails 连接到 MySQL [关闭]
【发布时间】:2019-11-22 22:50:46
【问题描述】:

我收到此错误:

No connection pool with 'primary' found.
        raise ConnectionNotEstablished, "No connection pool with '#{spec_name}' found for the '#{ActiveRecord::Base.current_role}' role."
          else
            raise ConnectionNotEstablished, "No connection pool with '#{spec_name}' found."
          end
        end

这是我的默认设置:

&default
  adapter: ruby-mysql
  encoding: utf8mb4
  pool: 5
  username: root
  password: 
  host: localhost
development:
  <<: *default
  database: demo_project_development
production:
  <<: *default
  database: demo_project_production
  username: root
  password: 
)

MySQL 正在运行,我所遵循的教程是使用 mysql2 适配器。

我的 Ruby 版本是 2.6.5。

请注意,我的数据库中没有表:

activerecord (6.0.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:1117:in `retrieve_connection'
activerecord (6.0.1) lib/active_record/connection_handling.rb:238:in `retrieve_connection'
activerecord (6.0.1) lib/active_record/connection_handling.rb:206:in `connection'
activerecord (6.0.1) lib/active_record/migration.rb:562:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
web-console (4.0.1) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.0.1) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.0.1) lib/web_console/middleware.rb:17:in `catch'
web-console (4.0.1) lib/web_console/middleware.rb:17:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (6.0.1) lib/rails/rack/logger.rb:38:in `call_app'
railties (6.0.1) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (6.0.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
activesupport (6.0.1) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (6.0.1) lib/active_support/tagged_logging.rb:80:in `tagged'
railties (6.0.1) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.0.7) lib/rack/method_override.rb:22:in `call'
rack (2.0.7) lib/rack/runtime.rb:22:in `call'
activesupport (6.0.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/static.rb:126:in `call'
rack (2.0.7) lib/rack/sendfile.rb:111:in `call'
actionpack (6.0.1) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
webpacker (4.2.0) lib/webpacker/dev_server_proxy.rb:23:in `perform_request'
rack-proxy (0.6.5) lib/rack/proxy.rb:57:in `call'
railties (6.0.1) lib/rails/engine.rb:526:in `call'
puma (4.3.0) lib/puma/configuration.rb:228:in `call'
puma (4.3.0) lib/puma/server.rb:667:in `handle_request'
puma (4.3.0) lib/puma/server.rb:470:in `process_client'
puma (4.3.0) lib/puma/server.rb:328:in `block in run'
puma (4.3.0) lib/puma/thread_pool.rb:134:in `block in spawn_thread'

【问题讨论】:

  • 你在哪里以及如何得到这个错误?这不是堆栈跟踪。以堆栈跟踪的形式显示实际错误。 MRE 请。
  • 标题中不要说“getting an error”,请尽量集中精力解决问题,更好地解释错误是什么。
  • @无法加载此类文件--mysql2/2.6/mysql2
  • minimal reproducible exampleminimal reproducible exampleminimal reproducible example! 如何您如何生成此错误,您的重现步骤是什么允许重现此错误的完整示例是什么
  • 运行 rails s 命令

标签: mysql ruby-on-rails ruby


【解决方案1】:

不要使用ruby-mysql gem。只需查看github repo,您就可以看到最后一次提交是在四年前,几乎所有提交都来自一个作者,另外自述文件是日文的。这不是好兆头。

改为使用积极维护的mysql2 gem。您可以通过运行以下命令生成已经为 MySQL 设置的 Rails 应用程序:

rails new my_app --database=mysql

或者,如果您想修复现有应用程序,请将 Gemfile 中的 ruby-mysql 替换为 mysql2 并设置正确的适配器:

default: &default
  adapter: mysql2
  # ...

【讨论】:

  • 我做到了 现在我需要安装我的 sql2,所以我得到 Error installed mysql2: mysql2 requires Ruby version = 2.0.
  • 是的,但为什么你的 ruby​​ 版本首先要早于 2.0?真的很老了
  • 我有 2.6.5 @Max
  • 您要安装什么版本的 mysql2 gem? 0.5.2 只是将版本列为s.required_ruby_version = '&gt;= 2.0.0'。您应该使用gem 'mysql2', '~&gt; 0.5.2' 之类的东西。 github.com/brianmario/mysql2/blob/…
  • 所以有什么灵魂吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 1970-01-01
相关资源
最近更新 更多