2010-11-17 2 views
2

Ich arbeite mit einer großen Rails-Anwendung, und ich habe die Aufgabe, Rake-Aufgaben zu deaktivieren, die in unseren Produktionsumgebungen schädlich sein könnten, z. B. db: migrate, reset usw. Ich bin mir jedoch nicht sicher, was hier am besten ist.Deaktivieren bestimmter Gruppen von Rake-Aufgaben

Bisher meine Lösung ist es, eine Aussage wie diese an der Spitze der databases.rake Aufgabe für alle Umgebungen, aber Entwicklungs- und Test

if ENV['RAILS_ENV'] == 'development' || ENV['RAILS_ENV'] == 'test' 

Jetzt offensichtlich diese deaktiviert alle Datenbank-Rake Aufgaben zu stellen. Allerdings habe ich das Gefühl, dass es hacky ist und ich mag es nicht. Kann mir jemand einen besseren Weg vorstellen, dieses Problem zu lösen, oder birgt diese Lösung größere Probleme, die ich vielleicht nicht wahrnehme?

EDIT: Eine Nebenfrage zu einem Problem, das ich angetroffen habe. Wenn ich meine RAILS_ENV auf ‚Produktion‘ über

export RAILS_ENV=production 

Das funktionierte gut, aber ich brauche meine Umgebung auf die Standardeinstellung zurück zu setzen ‚‘ Umwelt. Wenn ich versuche,

export RAILS_ENV= 

Ich erhalte einen Fehler

No such file or directory - project_path/config/environments/.rb 

Wer weiß, wie die Umwelt zurückzusetzen auf dem Standard?

Antwort

1

Für Ihre Nebenfrage ist die Standardumgebung "Entwicklung". So können Sie versuchen:

export RAILS_ENV=development 

Was Sie tun, ist eine leere Zeichenfolge RAILS_ENV zuweisen (die anders ist es überhaupt nicht existiert, das ist, was Sie wollen). Um dies zu erreichen, versuchen:

export -n RAILS_ENV 

Auch, wenn Sie sich Schalt Umgebungen, wie dies für One-Shot-Befehle (wie Rake Aufgaben und so weiter) zu finden, Sie könnten versuchen, die Variable nicht zu exportieren, nur um es zu definieren, wenn der Aufruf Befehl:

RAILS_ENV=production rake db:migrate 

Auf diese Weise, nachdem der Befehl abgeschlossen ist, müssen Sie nicht eine exportierte RAILS_ENV Variable; Denken Sie daran, dass es nur für diesen speziellen Aufruf von Rake definiert ist (oder für welchen Befehl Sie auch wollten).