简体   繁体   English

如何使用ruby-mysql将Ruby on Rails连接到MySQL [保持]

[英]How to connect Ruby on Rails to MySQL using ruby-mysql [on hold]

I get this error: 我收到此错误:

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

This is my default: 这是我的默认设置:

&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 is runnning, the tutorial I was following was using the mysql2 adapter. MySQL正在运行,我遵循的教程是使用mysql2适配器。

My Ruby version is 2.6.5. 我的Ruby版本是2.6.5。

Note I have no tables in my database: 注意我的数据库中没有表:

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'

Don't use the ruby-mysql gem. 不要使用ruby-mysql gem。 Just by looking at the github repo you can see that the last commit was four years ago and almost all the commits are from a single author, additionally the readme is in Japanese. 仅通过查看github存储库,您就可以看到上一次提交是在四年前,几乎所有提交都是来自单个作者,此外,自述文件是日语的。 That does not bode well. 那不是一个好兆头。

Instead use the mysql2 gem which is actively maintained. 而是使用主动维护的mysql2 gem You can generate a Rails application already set up for MySQL by running: 您可以通过运行以下命令生成已为MySQL设置的Rails应用程序:

rails new my_app --database=mysql

Or, if you want to fix your existing application, replace ruby-mysql with mysql2 in your Gemfile and set the correct adapter: 或者,如果要修复现有应用程序,请在Gemfile中将ruby-mysql替换为mysql2并设置正确的适配器:

default: &default
  adapter: mysql2
  # ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM