Ruby on Rails - 数据库设置
Ruby on Rails - 现代数据库设置
Section titled “Ruby on Rails - 现代数据库设置”在开始之前,请确保您的数据库服务器(例如 PostgreSQL 或 MySQL)正在运行。Ruby on Rails 通常为开发环境(development environment)、测试环境(testing environment)和生产环境(production environment)使用单独的数据库。按照惯例,如果您的应用名为 ‘myapp’,这些数据库将是:
- myapp_development
- myapp_production
- myapp_test
虽然您可以手动创建这些数据库,但 Rails 提供了 Rake 任务,可以根据您的 config/database.yml 文件创建和管理它们。对于开发环境,您通常需要一个数据库用户,该用户具有创建数据库和表的权限。
使用 config/database.yml 进行现代数据库配置
Section titled “使用 config/database.yml 进行现代数据库配置”Rails 使用 config/database.yml 文件连接到您的数据库。当您创建一个新的 Rails 应用(例如,rails new myapp -d postgresql)时,Rails 会生成此文件并带有合理的默认设置。强烈建议对敏感凭据(如密码)使用环境变量(environment variables),尤其是在生产环境中。
以下是 PostgreSQL 的示例。MySQL 设置类似,只需更改 adapter(适配器)。
default: &default adapter: postgresql encoding: unicode pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> host: <%= ENV.fetch("DATABASE_HOST") { 'localhost' } %> username: <%= ENV.fetch("DATABASE_USERNAME") { 'your_db_user' } %> password: <%= ENV['DATABASE_PASSWORD'] %> # Store password in an environment variable
development: <<: *default database: myapp_development
test: <<: *default database: myapp_test
production: <<: *default database: myapp_production username: myapp_prod_user # Potentially different user for production password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>关键变化和最佳实践:
- 适配器 (Adapters):常见的选择是
postgresql、mysql2或sqlite3(如果未指定-d标志,这是新应用的默认设置)。 - 环境变量 (Environment Variables):使用
ENV['YOUR_VARIABLE_NAME']或ENV.fetch("YOUR_VARIABLE_NAME") { 'default_value' }来配置主机 (host)、用户名 (username),尤其是密码 (password),这增强了安全性和灵活性。像dotenv-rails这样的 gem 可以帮助在开发环境中管理环境变量。 - YAML 锚点 (YAML Anchors):
&default和<<: *default减少了重复。 - 连接池 (Connection Pooling):
pool指定数据库连接的数量。这里通常使用RAILS_MAX_THREADS。
使用 Rails 创建数据库
Section titled “使用 Rails 创建数据库”一旦 config/database.yml 设置完毕,并且您的数据库服务器正在运行,用户具有创建数据库的权限(或者数据库已存在且用户具有访问权限),您可以使用 Rails 命令:
# 创建开发环境和测试环境数据库:$ bin/rails db:create
# 运行迁移(根据 db/migrate 文件创建表):$ bin/rails db:migrate
# 设置测试环境数据库模式(对测试很有用):$ bin/rails db:test:prepare手动创建数据库和用户(以 PostgreSQL 为例)
Section titled “手动创建数据库和用户(以 PostgreSQL 为例)”如果您更喜欢手动创建用户和数据库,这里有一个 PostgreSQL 示例。首先,创建一个数据库用户(例如,myapp_user):
$ sudo -u postgres createuser --interactive --pwpromptEnter name of role to add: myapp_userEnter password for new role:Enter it again:Shall the new role be a superuser? (y/n) nShall the new role be allowed to create databases? (y/n) yShall the new role be allowed to create more new roles? (y/n) n然后,您可以让 Rails 使用 bin/rails db:create(在 database.yml 中配置好此用户)来创建数据库,或者手动创建它们:
$ sudo -u postgres psqlpostgres=# CREATE DATABASE myapp_development OWNER myapp_user;postgres=# CREATE DATABASE myapp_test OWNER myapp_user;postgres=# CREATE DATABASE myapp_production OWNER myapp_user; # 通常位于单独的生产服务器上postgres=# \q对于 MySQL,命令会有所不同(例如,CREATE USER、GRANT PRIVILEGES、CREATE DATABASE)。请参考 MySQL 文档了解具体信息。
SQLite 是新 Rails 应用的默认设置,因为它基于文件且不需要独立的服务器,这对初学者来说很容易。然而,对于更接近生产环境的开发以及生产环境本身,PostgreSQL 和 MySQL 是更健壮、更常见的选择。请选择最适合您的项目需求和运行环境的数据库。
下一步是什么?
Section titled “下一步是什么?”配置好数据库后,下一步是通过模型 (models) 和迁移 (migrations) 定义应用程序的数据结构。这些将在后续章节中介绍。