首页 > 解决方案 > 如何使用 ruby​​-mysql 将 Ruby on Rails 连接到 MySQL

问题描述

我收到此错误:

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'

标签: mysqlruby-on-railsruby

解决方案


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

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

rails new my_app --database=mysql

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

default: &default
  adapter: mysql2
  # ...

推荐阅读