背景
我们分别设计数据库模型和应用程序模型(RDMBS架构师与OOP工程师)。从我所看到的Rails与域/密钥正常形式相比,Rails迁移不能轻易复制精心设计的企业RDBMS的所有功能(如果有的话),因此我们不迁移,而是使用其他工具来构建数据库(没关系对象 - 关系阻抗不匹配的问题)。数据完整性和数据库性能对我们来说太有价值,无法让任何开发人员对RDBMS模型进行更改。
问题
无论出于何种原因,我们现在都有一个Rails应用程序,它通过迁移破坏了数据库更改。如何在现有的Rails应用程序中干净地禁用此功能?
我有我的理论,但我想知道世界的想法。
答案 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