【问题标题】:Ruby on Rails server cannot connect to mysqlRuby on Rails 服务器无法连接到 mysql
【发布时间】:2024-03-09 08:10:01
【问题描述】:

每个人。 我正在尝试在 macOS X 上使用 mysql 作为数据库设置 rails 3 项目。但是,我收到下一个错误:

/usr/local/bundle/gems/activerecord-3.2.22.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:68:in connection_url_to_hash':nil:NilClass 的未定义方法“sub”(NoMethodError )

config/database.yml

default: &default
  adapter: mysql2
  pool: 5
  encoding: utf8
  min_messages: warning
  timeout: 5000
  username: root
  password:
  database: heart_development
  host: localhost

谁能建议如何解决这个问题?

【问题讨论】:

  • 是否可以在 Ruby 中包含导致此问题的最小示例?
  • 我只是尝试使用工头启动服务器,所以我不确定我可以提供哪些代码

标签: mysql ruby-on-rails-3


【解决方案1】:

从您共享的 database.yml 和发布的日志看来,它似乎无法找到数据库所在的路径。

把database.yml改成

  default: &default
  adapter: mysql2
  pool: 5
  encoding: utf8
  min_messages: warning
  timeout: 5000
  username: root
  password:
  database: heart_development
  host: localhost

数据库必须连接到的指定主机。

【讨论】:

  • 是的,我在这里抄错了,主机存在于我的配置中
  • 你的数据库用户有密码吗?
  • 不,我在 .env 中指定了 MYSQL_ALLOW_EMPTY_PASSWORD=true 并且之前没有为 root 添加任何密码
  • 我也尝试用单个 url 替换主机、端口、数据库,但 id 没有任何意义 url: jdbc:mysql://root@localhost:3306/heart_development
  • 请尝试在database.yml中添加端口,你能从命令行连接到数据库吗?
【解决方案2】:

我在.env 文件中注释了环境变量DATABASE_URL。我还通过以下方式配置了我的database.yml

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: heart_development
  pool: 5
  username: root
  password:
  host: localhost
  port: 3306

test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: heart_test
  pool: 5
  username: root
  password:
  host: localhost
  port: 3306

production:
  adapter: mysql2
  encoding: utf8cm
  reconnect: false
  database: heart_production
  pool: 5
  username: root
  password:
  host: localhost
  port: 3306

【讨论】: