我非常懒惰,不喜欢制作迁移。我想先创建我将要使用的模型,然后让其他工具为我在ruby中找出迁移,因为.Net已经宠坏了我。有没有一种gem可以从模型中获取活动记录迁移?即使在ruby中你从未明确设置类型,这也可能吗?
我非常懒惰,不喜欢制作迁移。我想先创建我将要使用的模型,然后让其他工具为我在ruby中找出迁移,因为.Net已经宠坏了我。有没有一种gem可以从模型中获取活动记录迁移?即使在ruby中你从未明确设置类型,这也可能吗?
require 'rubygems'
require 'dm-core'
require 'dm-migrations'
DataMapper::Logger.new($stdout, :debug)
DataMapper.setup(:default, 'mysql://localhost/test')
class Person
include DataMapper::Resource
property :id, Serial
property :name, String, :required => true
end
DataMapper.auto_migrate!
这没有任何意义。你的模型从架构中提取数据结构,而不包含列/表定义。无法从模型“推送”表结构到迁移中,这是不可能的。数据就是不存在的。
按照现有写法,这个模型可能会持续存在一个拥有一千列或一个列的表中,我们无从得知:
class User < ActiveRecord::Base
end
只需使用Rails生成器即可同时生成模型和迁移。
User
模型,按照书写方式,是一个完全有效的模型,根据模型定义无法获取有关其列的任何信息。 - user229044由于 Ruby 没有明确地设置类型,
此外,在模型中你甚至不需要列出字段。ActiveRecord 会从数据库架构中发现它们,这是架构知识库。它就是这样工作的。试图让它以另一种方式工作将造成巨大的痛苦和沮丧。
如果你正在使用遗留数据库,你不需要迁移,也不想要它们。如果你试图使用迁移工具,你的数据库管理员可能会杀了你。
话虽如此,我已经使用 Sequel 反向工程了遗留数据库,为我们内部使用的工具创建了模型,这些工具没有提供数据库布局。
作为其中的一部分,我通过 Sequel 访问模式,并获取字段名称、数据类型和大小。这就是你需要重建迁移所需的信息。
这不是一个万能的解决方案。你需要停止“超级懒”和“愚蠢”的行为,并编写代码来完成这个过程,但这是完全可行的。
手动转储模式,并编写代码来挑选出重要信息,并将其写入单个迁移文件中,以启动你的系统。