Desativar tarefas destrutivas de rake por ambiente

Poucas tarefas em Rails podem ser tão destrutivas quanto db: drop. Executar rake db: drop in development geralmente não é um grande problema, pois os dados são provavelmente facilmente substituídos. Mas e se você acidentalmente executar um rake db: drop em seu aplicativo de produção?

Sendo um bom desenvolvedor, você deve ter um backup recente que possa usar, mas isso ainda é um incômodo. Esperançosamente, nada disso acontecerá, mas por que não cobrir sua bunda de qualquer maneira? Com algumas linhas de código, podemos substituir tarefas como db: drop em um ambiente de produção.

/lib/tasks/db.rake

if Rails.env == 'production'
tasks
= Rake.application.instance_variable_get '@tasks'
tasks
.delete 'db:reset'
tasks
.delete 'db:drop'
namespace :db do
desc
'db:reset not available in this environment'
task
:reset do
puts
'db:reset has been disabled'
end
desc
'db:drop not available in this environment'
task
:drop do
puts
'db:drop has been disabled'
end
end
end

Agora, se você realmente chegar ao ponto em que precisa usar isso em seu ambiente de produção, precisará comentar este código e reimplantar. Claro, pode ser meio chato, mas, em minha opinião, o trabalho de comentar isso é muito menos trabalhoso do que restaurar um banco de dados inteiro.