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.