Wie kann man feststellen, ob Schienen in Produktion sind?

84

Ich habe script/server -e productionSchienen im Produktionsmodus gestartet. Es tat und ich bekam keine Fehler. Wie kann ich jedoch feststellen, ob es sich im Produktionsmodus befindet? Ich habe eine nicht vorhandene Route ausprobiert und eine ähnliche Fehlerseite erhalten, die ich in der Entwicklung erstellt habe.

Ich dachte, wenn ich unter dem Produktionsmodell die 404-Fehlerseite bekomme, die sich in meinem / public-Ordner befindet.

Bedeutet das, dass es nicht im Produktionsmodus gestartet wurde?

Danke für Ihre Hilfe.

sent-hil
quelle

Antworten:

33

2 einfache Möglichkeiten:

tail -f log/production.log

Wenn in diesem Protokoll Einträge vorhanden sind, nachdem Sie die App aufgerufen haben, befinden Sie sich im Produktionsmodus.

zweiter Weg:

Fügen Sie in einer Ihrer Ansichten (wahrscheinlich ist das Layout gut) einfach hinzu

<%= "Environment: #{RAILS_ENV}" %>

Und das zeigt Ihnen, in welcher Umgebung Sie arbeiten.

bearbeiten

Wenn die Anforderung als "lokal" (dh von localhost oder 127.0.0.1) betrachtet wird, wird in jeder Umgebung die Standardausnahmeseite anstelle der eigentlichen Fehlerseiten angezeigt. Sie können dies überschreiben, indem Sie diese zu Ihrer hinzufügen ApplicationController

def local_request?
  false
end

Sie finden diese Methode in den Dokumenten in der API

Dan McNevin
quelle
Ich kann den zweiten Weg zur Arbeit nicht finden, aber es gibt Einträge in meinem Production.log, die besagen, dass ich zur X-Zeit eine Aufgabe erstellt habe. Warum erhalte ich nicht die richtige 404-Fehlerseite? Muss ich irgendwo angeben, um die richtige Fehlerseite bereitzustellen? Danke für die Hilfe.
Sent-Hil
Ich habe einen Fehler in meiner Ansicht erhalten und musste stattdessen den Ansatz von @ Krishnaprasad verwenden.
Besi
5
Bitte beachten Sie, dass RAILS_ENVveraltet ist. Verwenden Sie Rails.envstattdessen.
Soullivaneuh
236

Wenn seine Rails 3.1+, Rails.env.production?wird truein der Produktion zurückkehren.

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Krishnaprasad Varma
quelle
2
>> Rails.envvia rails cwird für jeden Modus angezeigt.
obfk
6
Rails.env.development?auch verfügbar.
hlcs
Alles mit einem Fragezeichen ist verfügbar. Rails.envist eine Schnur verziert mit ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer
Nur als Hinweis, dies funktioniert auch in der Rails-Konsole. Auf einem Produktionsserver konnte ich Folgendes ausführen: Rails Console, dann den obigen Befehl.
Ryan
28

Gibt bei modernen Rails-Versionen (3+) Rails.envdie Umgebung wie folgt zurück String:

Rails.env #=> "production"

Es gibt auch hilfreiche Accessoren für jede Umgebung, die Folgendes zurückgeben Boolean:

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Hundewetter
quelle
8

Geben Sie rails consoledann in Ihrer Befehlszeile ein Rails.env.

Karolis Ramanauskas
quelle
3

Ich fand es viel einfacher, den Rails-Server neu zu starten und die zweite Zeile in der Befehlszeile zu lesen:

Laufende rails s -e productionAusgaben:

=> Booting Puma
=> Rails 4.2.4 application starting in `production` on http://localhost:3000

Hatte Webrick im Beispiel, aber einige Leute verstanden nicht, wie das Ändern von Servern nur den Namen ersetzen würde. Aus Gründen der Übersichtlichkeit aktualisiert.

bkunzi01
quelle
8
Niemand, der gesund ist, verwendet WEBrickin der Produktion.
Hauleth
Hauleth ist absolut richtig. Dies dient lediglich dazu, zu testen, in welcher Umgebung Sie sich während der Entwicklung befinden.
bkunzi01
Wenn diese Antwort trollt, ist es Meisterschaft! Herzliche Glückwünsche!
JD.
-2

Befehlszeilenalternative

$ echo $ RAILS_ENV

Vireshas
quelle
Dies funktioniert nicht, wenn der Server mit einer Inline-ENV-Variable gestartet wurde. Das heißt, wenn dies getan wurde, sollte ein Skript / Alias ​​/ etc irgendwo auf der Festplatte gespeichert sein, das die Variable RAILS_ENV enthält. Man kann die Festplatte danach durchsuchen, beispielsweise mitack
New Alexandria
das funktioniert nicht .... was ist in der Variablen und wie bekommt es die Umgebung ???
Zee