【发布时间】:2014-09-07 06:08:11
【问题描述】:
背景
我们分别设计数据库模型和应用程序模型(RDMBS 架构师与 OOP 工程师)。从我所看到的关于 Rails 与域/键范式的情况来看,Rails 迁移无法轻松复制精心设计的企业 RDBMS 的所有功能(如果有的话),因此我们不迁移而是使用其他工具来构建数据库(不要介意对象关系阻抗不匹配的问题)。数据完整性和数据库性能对我们来说太宝贵了,不能冒任何开发人员更改 RDBMS 模型的风险。
问题
无论出于何种原因,我们现在有一个 Rails 应用程序通过迁移对数据库进行了破坏性更改。如何在现有 Rails 应用程序中彻底禁用此功能?
我有我的理论,但我想知道世界的想法。
【问题讨论】:
-
总是最好地分享您的理论并展示您在问题中尝试过的内容。
-
如果您使用 capistrano 进行部署,我敢打赌您可以将其配置为跳过
db:migraterake 任务。不确定其他部署工具。 -
您可以查看 this 之类的内容,然后覆盖所有数据库 rake 任务以不执行任何操作 - 或者可能显示一条消息“Naughty developer”?我认为实际上没有办法通过配置选项禁用它们
-
同意,只需编写您自己的任务,或创建一个迁移模板,该模板不允许任何内容,或您认为“可以”的部分内容;见stackoverflow.com/q/5202008/438992。
-
@Brian。是的,使用 Capistrano,但希望得到比 cap 或 rake 更低的级别。我相信即使没有上限部署,我们也可以修改其中一个开发数据库,我也想避免这种情况。我更多地考虑用逐项列表替换
require 'rails/all'。从 cap 任务中删除 migrate 将是一个很好的第二层强制执行。另一种选择是创建两个 DB 用户:一个用于 DB 工作,一个用于具有较少权限的 Rails。不知道这将如何结束,但可能是最聪明的路线。尽管如此,仍然想步履蹒跚。
标签: ruby-on-rails oop database-design rails-activerecord rails-migrations