介绍

你好,我是莫基奥。加入一家没有经验的内部开发公司已经半年多了。

Slack 中的对话
学姐:“啊?开发数据库的数据消失了……?”
成员``我也看不到数据库......''
前辈 “都过去了,不是吗?”

这时候,我不禁冒出一身冷汗。因为我有很多感受。
是的,我绝对是删除开发数据库上千万数据的人。

你为什么删除数据?

我正在创建一个测试数据库来每次运行测试,但是有一个事件在测试中间停止并且没有按原样进行。

rails db:create Rails_ENV=test
rails db:migrate Rails_ENV=test

所以感觉migration不太好,在尝试重置test DB的时候,在没有指定test的情况下输入了下面的命令,貌似开发DB中的数据全部重置了。

rails db:migrate:reset #Rails_ENV=test このENV指定を付け忘れて実行してしまった。

嗯,最后发生的事情是开发数据库被备份了,所以我从备份中恢复了它。非常感谢,备份。

禁用重置命令

CTO“请确保reset命令不能在开发环境中执行,这样以后就不会发生这样的事情了。”
Mokio:是的,我当然会!
所以我承担了责任并分配了一项任务,以防止在Rails中执行reset命令。

但是,你是怎么做的?本来以为是笑话,结果发现了一篇好文章。这篇文章也发表在《Ruby on Rails 5 Rapid Learning Practical Guide》上,所以我觉得是一篇靠谱的文章。

我实际上实现了

根据这篇文章,Rails 5 或更高版本引入了一种机制来防止在生产环境中执行 DB 销毁任务。 rails c 试试
如果你打开控制台运行ActiveRecord::Base.protected_environments
【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)
真的,生产环境似乎默认阻止执行 DB 破坏命令。

有必要将以下描述写到config/application.rb,以便在开发环境中应用它。

# config/application.rb
ActiveRecord::Base.protected_environments = %w(production development)

再次打开控制台并检查
【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)
好像添加成功了。

最后,我通过实际执行reset命令进行了验证。但是很吓人,所以将测试环境添加到protected_environments 并在测试环境中检查执行lol
【もうやらかさない】開発DBのデータを全部消しちゃったお話(改善策もあるよ)
与文章执行错误相同的错误成​​功发生。这似乎是成功的。

后记

怎么样?这一次,我大谈特谈。经常听说生产数据被删除了,我以为真的是这样,结果我真的做到了lol

我真的很想小心数据库。

非常感谢您观看到最后! !
如果您认为它更好一点,如果您可以单击 LGTM 按钮,我将不胜感激。

如果您能在 Twitter 上看到它,我将不胜感激,因为我在日常工作中喃喃自语。
@mokio_50


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308624046.html

相关文章: