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?


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.