Jos*_*osh 80
建立在@qarol但更酷的时候,将此Rake任务添加到您的一个Rake文件中:
task :log => :environment do
ActiveRecord::Base.logger = Logger.new(STDOUT)
end
Run Code Online (Sandbox Code Playgroud)
然后你可以调用ANY Rake任务并记录输出:
rake log db:migrate
Run Code Online (Sandbox Code Playgroud)
qar*_*rol 37
您可以在lib/tasks/以下位置创建Rake任务:
namespace :db do
desc 'Make migration with output'
task(:migrate_with_sql => :environment) do
ActiveRecord::Base.logger = Logger.new(STDOUT)
Rake::Task['db:migrate'].invoke
end
end
Run Code Online (Sandbox Code Playgroud)
然后调用rake db:migrate_with_sql以记录迁移.
小智 6
为此,我将capture_migration_sql gem放在一起。它将您的迁移 SQL 转储到db/migration_sql.
如果您只需要查找单个 SQL 语句,这是一种矫枉过正的做法,但如果您的生产过程需要原始 SQL 语句,那就太好了。它还可以使在代码审查中审查复杂的数据库更改更容易一些,因为不需要 ruby -> SQL 心算。
您可以像这样运行预览 SQL rails console:
ActiveRecord::Base.connection.change_table(:events) do |t|
t.integer :submission_id, default: 5, null: false
end
#=> ALTER TABLE `events` ADD `submission_id` int DEFAULT 5 NOT NULL
Run Code Online (Sandbox Code Playgroud)
因此,只需在普通迁移方法前面加上ActiveRecord::Base.connection.,就可以开始了。
还有一种rails console --sandbox模式可以在关闭控制台后回滚更改。虽然检查它是否适用于您的项目,但不知何故,对于我们使用 Rails 5 + MySQL 的项目,它不会回滚 DDL 更改。
如果你准备好了迁移文件,也可以直接运行:
ActiveRecord::MigrationContext.new("db/migrate").migrate
ActiveRecord::MigrationContext.new("db/migrate").rollback
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12699 次 |
| 最近记录: |