如何正确使用 rake db 命令
Rake是Ruby 和 Rails内置的一个实用工具,它提供了一种高效的方式来管理数据库变更。您只需使用命令行即可轻松地将数据库变更迁移到服务器!
在应用程序开发过程中,您可能会问自己:
- 使用rake 数据库命令时会发生什么?
- 我应该在什么情况下使用它们?
让我们来看看如何在开发应用程序时使用这些命令来更改数据库!
创建
$ rake db:create
首次创建Rails 应用 时,它还没有数据库。为了使其能够启动,您需要确保数据库已启动并运行。
就像建议为每个环境使用不同的 gem一样,你也应该创建三个数据库,分别用于开发、测试和生产环境。你可以在配置文件中进行配置config/database.yml。
default: &default
adapter: postgresql
encoding: unicode
username: username
password: password
host: localhost
port: 5432
development:
<<: *default
database: story_dev
test:
<<: *default
database: story_test
production:
<<: *default
database: story
迁移
rake db:migrate
迁移操作会在数据库中创建表。运行迁移命令时,它会查找db/migrate/所有 Ruby 文件,并从最早的文件开始执行。每个迁移文件名开头都有一个时间戳。
每次迁移数据库或对其进行任何更改(例如添加行或列、添加表或更改数据类型)时,都必须运行此命令才能使更改反映到数据库中。Rails应用程序中的数据库 Rake 任务列表
当您运行类似rails generate scaffold、rails generate model或 之类的命令时,就会创建迁移rails generate migration。
以下是上传图片rake db:migrate时的使用示例。请确保迁移文件中不要创建数据!
初始化
rake db:schema:loadrake db:migrate与运行尚未运行的迁移 不同,rake db:schema:load它会将已生成的模式加载db/schema.rb到数据库中。
以下情况务必使用此命令:
- 您首次运行该应用程序。
- 当你删除数据库后需要重新创建它时。
注意!如果在生产服务器上运行rake db:schema:load,最终会删除所有生产数据。
播种
rake db:seed
为了测试目的,我们总会在应用程序中保留一些默认数据。seed命令的作用就是自动化这个过程。
例如:创建一个管理员用户并将其数据存储在db/seed.rb文件中。运行时,rake db:seed它会将所有管理员数据加载到您的应用程序中。
Admin.create!(email: 'admin@kolosek.com',
password: 'password',
password_confirmation: 'password')
Rails 的种子用户填充功能通常用于开发和/或测试环境,在生产环境中只有极少数用途。你肯定不希望你的生产应用程序使用虚拟用户进行种子填充!
回滚
rake db:rollback
你是否不小心创建了迁移,或者只是改变了主意?别担心!运行此命令后,它将查找并撤销最后创建的迁移!
例如:我们先创建一个新的迁移,并将参数设置:role为整数并运行它。然后我们决定将其改为字符串。因此,我们编辑新创建的迁移并再次运行它,但没有任何反应,并且您的测试和工厂都会失败。
class CreateRoles < ActiveRecord::Migration
def change
create_table :roles do |t|
t.integer :role # we will change this to t.string :role
t.references :user
t.timestamps
end
end
end
为什么这个命令不起作用?
它只会运行最后创建的迁移rake db:migrate文件。这意味着编辑已存在的迁移文件不会产生任何更改。要使其生效,您需要运行rake db:rollback以下命令。这将告诉 Rails 执行两项操作:
- 撤销您刚刚对数据库所做的最后更改。
- 更新迁移时间戳。## 删除
rake db:drop有时我们需要删除所有数据和表,然后从头开始。这就是此命令rake db:drop的用途。如果您想保留现有数据,请务必在运行此命令之前备份数据。
删除数据库还会清除任何模式冲突或错误数据。数据库删除后,您需要重新创建数据库、运行迁移并填充数据,从而重新启动整个流程。请务必确保在重建数据库后,您的RSpec 测试能够通过!
请确保没有与数据库建立连接,否则不会断开连接。
重置
rake db:reset
有时您可能需要删除本地数据库,然后从外部加载数据重新开始db/seeds.rb。当您仍在确定数据库模式,并且经常需要向现有模型添加字段时,此命令非常有用。
使用重置命令后,它将执行以下操作:
- 删除数据库:
rake db:drop - 加载模式:
rake db:schema:load - 输入种子数据:
rake db:seed
rake db:schema:load为什么使用db:schema:load 而不是 db:migrate?rake db:migrate因为它加载的是我们已经生成的 schema,db/schema.rb而不是再次执行所有迁移。
希望这能帮助你理解 rake 数据库命令之间的主要区别!
本文最初发表于Kolosek Blog。
文章来源:https://dev.to/neshaz/how-to-use-rake-db-commands-in-the- Correct-way--50o2