Wie kann ich feststellen, ob sich meine Schienen in der Entwicklungsumgebung und nicht in der Testumgebung befinden?

78

Ich habe Code, der nur ausgeführt werden muss, wenn sich die Rails-App in der Entwicklungsumgebung (dh $ Rails-Server) befindet, aber nicht in der Testumgebung (dh $ Rake-Test).

Wenn ich es versuche

if Rails.env.development?
    dont run me during testing
end

Der Code wird unabhängig von der Umgebung ausgeführt, in der ich mich befinde. Ich habe sogar versucht:

if Rails.env.development? and not Rails.env.test?
    NO, REALLY, DONT RUN ME DURING TESTING
end

aber keine Liebe.

Was soll ich stattdessen tun?

spierepf
quelle
Dieser Code sollte funktionieren. Haben Sie versucht, Rails.envinnerhalb dieses Blocks auszugeben , um zu sehen, welche Umgebung Rails verwendet?
PinnyM
1
Ich denke, es könnten die "und nicht" Bits sein. Das ist nicht dasselbe wie &&! Das schätze ich ... hast du eine Lösung gefunden?
Baash05
Ich habe nie eine Lösung gefunden. Aus irgendeinem Grund führt Rails seine Initialisierer zweimal aus (siehe Kommentar unten). Ich habe seitdem Schienen verlassen.
Spierepf

Antworten:

145

Es sieht so aus, als würden Sie es richtig nennen. Vielleicht liegt das Problem darin, dass die Umgebung irgendwo anders benannt ist. Versuchen Sie es in der Konsole:

> Rails.env
=> "development"
> Rails.env.development?
=> true
> Rails.env.test?
=> false

... um zu bestätigen, dass die Umgebung so ist, wie Sie denken.

Mori
quelle
1
Ok, ich habe einen Initialisierer erstellt, der lediglich "Rails.env" setzt. Das Ergebnis ist, dass der $ Rails-Server "Entwicklung" liefert, während der $ Rake-Test sowohl "Entwicklung" als auch "Test" liefert. Dies deutet darauf hin, dass Rails meinen Initialisierer während des $ Rake-Tests zweimal ausführt.
Spierepf
2
Sie können die Konsole auch in einer bestimmten Umgebung öffnen, z RAILS_ENV=test rails console.
Mori
1
Machen Sie sich keine Sorgen, wenn Sie pry nicht in Ihrer App installiert haben. es funktioniert auch in einer einfachen Konsole
ImranNaqvi