为 Ruby on Rails Database.yml 文件正确配置 MySQL

Posted

技术标签:

【中文标题】为 Ruby on Rails Database.yml 文件正确配置 MySQL【英文标题】:Correct MySQL configuration for Ruby on Rails Database.yml file 【发布时间】:2011-08-17 20:29:14 【问题描述】:

我有这个配置:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: mysql://127.0.0.1:3306

我收到了这个错误:

Unknown MySQL server host 'mysql://127.0.0.1:3306' (1)

有什么明显的我做错了吗?

【问题讨论】:

【参考方案1】:

您应该将主机与端口号分开。 你可以有一些东西,比如:

development:
  adapter: mysql2
  encoding: utf8
  database: my_db_name
  username: root
  password: my_password
  host: 127.0.0.1
  port: 3306

【讨论】:

和主机不能是host: localhost 出于安全原因,将root 用作生产数据库用户通常被认为是不好的做法。要为您的 rails 应用程序设置专用用户,请参阅MySQL docs about user creation。 同样出于安全原因(如果您使用版本控制),您不应将数据库密码存储在database.yml 中。相反,请执行 user3118220 所做的并从您的环境中获取它:password: ENV['MY_RAILS_APP_DB_PASSWORD']【参考方案2】:

你也可以这样做:

default: &default
  adapter: mysql2
  encoding: utf8
  username: root
  password:
  host: 127.0.0.1
  port: 3306

development:
  <<: *default
  database: development_db_name

test:
  <<: *default
  database: test_db_name

production:
  <<: *default
  database: production_db_name

【讨论】:

【参考方案3】:

使用'utf8mb4'作为编码覆盖所有unicode(包括emojis)

default: &default
  adapter: mysql2
  encoding: utf8mb4
  collation: utf8mb4_bin
  username: <%= ENV.fetch("MYSQL_USERNAME") %>
  password: <%= ENV.fetch("MYSQL_PASSWORD") %>
  host:     <%= ENV.fetch("MYSQL_HOST") %>

(Reference1) (Reference2)

【讨论】:

【参考方案4】:

如果你可以有一个空的 config/database.yml 文件然后定义 ENV['DATABASE_URL'] 变量,那么它将起作用

$ cat config/database.yml
 
$ echo $DATABASE_URL
mysql://root:my_password@127.0.0.1:3306/my_db_name

对于 Heroku: heroku 配置:设置DATABASE_URL='mysql://root:my_password@host.com/my_db_name'

【讨论】:

【参考方案5】:

如果您有多个用于测试和开发的数据库,这可能会有所帮助

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
test:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost
production:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: DBNAME
  pool: 5
  username: usr
  password: paswd
  shost: localhost

【讨论】:

shosthost 有何不同?【参考方案6】:

这些答案都不适合我,我发现 Werner Bihl 的答案解决了这个问题。

Getting "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'" error when setting up mysql database for Ruby on Rails app

【讨论】:

以上是关于为 Ruby on Rails Database.yml 文件正确配置 MySQL的主要内容,如果未能解决你的问题,请参考以下文章

ruby on rails (项目开始准备一)

如何使用 json 文件在 ruby​​ on rails 中填充模型(数据库)?

Ruby on Rails 上“...的预期字符串默认值”的含义

Ruby on Rails 上“...的预期字符串默认值”的含义

如何在 ruby​​-on-rails 应用程序上使用 Rack 发送 POST 模拟请求?

将 Ruby on Rails 连接到现有的 MySQL 数据库(以前安装的 XAMPP)