如何在Rails应用程序中禁用迁移功能?

时间:2014-07-16 16:00:10

标签: ruby-on-rails oop database-design rails-activerecord rails-migrations

背景

我们分别设计数据库模型和应用程序模型(RDMBS架构师与OOP工程师)。从我所看到的Rails与域/密钥正常形式相比,Rails迁移不能轻易复制精心设计的企业RDBMS的所有功能(如果有的话),因此我们不迁移,而是使用其他工具来构建数据库(没关系对象 - 关系阻抗不匹配的问题)。数据完整性和数据库性能对我们来说太有价值,无法让任何开发人员对RDBMS模型进行更改。

问题

无论出于何种原因,我们现在都有一个Rails应用程序,它通过迁移破坏了数据库更改。如何在现有的Rails应用程序中干净地禁用此功能?

我有我的理论,但我想知道世界的想法。

2 个答案:

答案 0 :(得分:5)

当测试最终出现在前面时,这又出现了。因此,我深入了解并提出了以下感谢,部分原因是对问题的评论。这将删除所有rake DB功能,测试仍然运行正常。 (如果有人想知道,当我们需要刷新它时,我们会从别处克隆测试数据库。)

将其添加到Rakefile

# Disable DB migrations, DB test preparing, etc.
Rake::Task.tasks.each do |t|
    if t.name[0,3] == "db:"
        t.clear
        t.add_description("!!! Disabled in favor of enterprise design at Acme.")
    end
end

注释掉test/test_helper.rb中的所有灯具:

#fixtures :all

答案 1 :(得分:4)

在juanitogan的回答中,我们禁用所有数据库任务。在我的情况下,我仍然希望能够运行db:schema:load。这里是Rakefile的略微修改的代码:

# Disable migrations
Rake::Task.tasks.each do |t|
  if t.name.start_with?("db:migrate")
    t.clear
    t.add_description("Disabled; Load the data model via db:schema:load.")
    t.actions << proc { puts "Migrations ignored. That's ok. Please see README."}
  end
end

创建模型时,您可以添加--no-migration选项,如下所示:rails g model abc --no-migration