Bus*_*ark 1 ruby model ruby-on-rails
我有一个具有大量数据库关系的应用程序,它们相互依赖以成功运行应用程序.应用程序中的铰链是一个名为Schedule的模型,但是计划将拉出Blocks,Employee,JobTitle和Assignment(除此之外,每个Block也会从数据库中提取一个赋值)到全天组织员工日程安排.
当我构建应用程序时,我非常强调验证,以确保在将所有内容保存到数据库之前所有部分都必须到位.到目前为止,这已经非常出色,应用程序已经上线了近6个月,每月提供大约150,000个请求,没有打嗝或错误.直到上周.
上周,当某人正在改变计划时,看起来数据库出错了,并且计划保存到数据库时,其分配缺失.因为在每个视图中都调用了关联,所以无论何时从数据库调用此调度,应用程序都会在调用nil时抛出NoMethod错误.
在按照我声明的方式设计应用程序时,您是否防止数据库/验证可能出现故障?如果是这样,你如何编程防御呢?在将其发送到视图之前,您是否检查了每个关系以确保它不是nil?
我知道这个问题很普遍,如果我的意思更具体,请在评论中告诉我.
我建议添加数据库强制的外键约束并将重要的操作组包装到事务中.
如果某个地方的Schedule和Assignment之间存在外键,则数据库强制的外键约束将阻止错误插入.此外,如果将特定操作包装在事务中,则可以确保整个插入/更新/删除流发生或失败,恢复到干净状态.
除了您的验证,并添加其他答案中提到的一些数据库约束,您还可以运行后台作业,定期扫描数据库以查找孤立.
当它找到一个时,它会清理它(如果可能的话),或删除它,或者只是将它标记为非活动状态并向您发送电子邮件,以便您以后查看它.根据数据的数量和性质,每分钟一次,每小时一次,每天一次......
这样一来,如果不管你有什么安全措施,不良数据确实进入,你很快就会知道它.
归档时间: |
|
查看次数: |
186 次 |
最近记录: |