为 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
【讨论】:
shost
与 host
有何不同?【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 json 文件在 ruby on rails 中填充模型(数据库)?
Ruby on Rails 上“...的预期字符串默认值”的含义
Ruby on Rails 上“...的预期字符串默认值”的含义