Rails Rails 连接数据库出错

HyeKyoZ-github · 2021年05月12日 · 最后由 HyeKyoZ-github 回复于 2021年05月12日 · 346 次阅读

gemfile

使用 rails new almond -d mysql 命令创建了一个新项目 接着就修改了一下 config/database.yaml 里的 password,如图: 然后执行 rails db:create 报错,如图 请问下这个有人遇到吗?

database.yml

# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: almond_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: almond_test

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password or a full connection URL as an environment
# variable when you boot the app. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
#   production:
#     url: <%= ENV['MY_APP_DATABASE_URL'] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
  <<: *default
  database: almond_production
  username: almond
  password: <%= ENV['ALMOND_DATABASE_PASSWORD'] %>

不知怎么把 root 识别为 adapter 了呢,贴一下纯文本的 database.yml,看看有没有特殊字符。

Rei 回复
# MySQL. Versions 5.5.8 and up are supported.
#
# Install the MySQL driver
#   gem install mysql2
#
# Ensure the MySQL gem is defined in your Gemfile
#   gem 'mysql2'
#
# And be sure to use new-style password hashing:
#   https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html
#
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: root
  socket: /tmp/mysql.sock

development:
  <<: *default
  database: almond_development

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: almond_test

# As with config/credentials.yml, you never want to store sensitive information,
# like your database password, in your source code. If your source code is
# ever seen by anyone, they now have access to your database.
#
# Instead, provide the password or a full connection URL as an environment
# variable when you boot the app. For example:
#
#   DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase"
#
# If the connection URL is provided in the special DATABASE_URL environment
# variable, Rails will automatically merge its configuration values on top of
# the values provided in this file. Alternatively, you can specify a connection
# URL environment variable explicitly:
#
#   production:
#     url: <%= ENV['MY_APP_DATABASE_URL'] %>
#
# Read https://guides.rubyonrails.org/configuring.html#configuring-a-database
# for a full overview on how database connection configuration can be specified.
#
production:
  <<: *default
  database: almond_production
  username: almond
  password: <%= ENV['ALMOND_DATABASE_PASSWORD'] %>

暂没发现配置问题,看到错误栈有 spring,执行一下 bin/spring stop,再执行其它命令。这玩意有时会引起奇怪的问题。

Rei 回复

没用,重启系统都试了😂

搞不懂了,要不新建一个项目看看。😅

Rei 回复

也试过了,我现在在重新用 rbenv 装 ruby 试一下,谢谢大佬

我看你的 stack trace 里面还有 spring,用环境变量把它关了

可以看看 ENV['DATABASE_URL'] 是不是有值

zhengpd 回复

是的,有值,谢谢😂

我复制了你的 database.yml ,没有问题,可以正常创建数据库。(我把 socket: /tmp/mysql.sock 改成 host: 了)

正如楼上所说,检查一下 DATABASE_URL 环境变量吧。

xinyifly 回复

就是 DATABASE_URL 变量有值导致的。谢谢

HyeKyoZ-github 关闭了讨论。 05月12日 14:00
需要 登录 后方可回复, 如果你还没有账号请 注册新账号