Aar*_*son 11 sql database ruby-on-rails rails-migrations
我正在创建一个新的Rails应用程序,它将与现有的模式一起使用.我已经获得了模式SQL,但我想创建Rails迁移以在开发中填充数据库.架构并不过分复杂,大约有20个表,但是我不想浪费时间和手动创建迁移的风险.
有没有办法在给定模式的SQL的情况下生成Rails迁移?
Fra*_*eil 15
当然,将您的应用程序连接到您的数据库,然后运行
rake db:schema:dump
Run Code Online (Sandbox Code Playgroud)
这将为您提供db/schema.rb,其中包含所有定义.现在您已拥有该db/schema.rb,只需将声明中的内容复制到新的迁移中即可.我以前做过这个,它的效果非常好.
我更喜欢使用SQL execute调用简单地编写初始迁移的up方法:
class InitialDbStructure < ActiveRecord::Migration
def up
execute "CREATE TABLE abouts (
id INTEGER UNSIGNED AUTO_INCREMENT,
updated_at TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_at TIMESTAMP,
title VARCHAR(125),
body MEDIUMTEXT,
CONSTRAINT PK_id PRIMARY KEY (id),
INDEX ORDER_id (id ASC)
) ENGINE=InnoDB;"
end
Run Code Online (Sandbox Code Playgroud)
笔记
您会发现,特别是如果您经常重建和重新填充表(rake db:drop db:create db:schema:load db:fixtures:load)时,execute语句的运行速度远远快于Ruby解释语法。例如,用Ruby语法从Rails迁移中重建表需要花费55秒以上的时间,而execute语句将在20秒内重新生成并重新填充我们的表。在初始内容定期修订或表规范定期修订的项目中,这当然是一个重大问题。
也许同等重要,您可以通过在执行的SQL语法中维护单个原始迁移并通过首先破坏schema.rb,然后在重新创建之前运行rake db:reset来重新执行(对该单个文件的)迁移来保持此重建和重新填充的速度。 -填充表格。确保设置:version => 0,这样您将获得一个忠实于迁移的新模式:
ActiveRecord::Schema.define(:version => 0) do
end
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5175 次 |
| 最近记录: |