Come sapere se i binari sono in produzione?


86

Ho usato script/server -e productionper avviare rails in modalità di produzione. Lo ha fatto e non ho ricevuto errori. Tuttavia come faccio a sapere se è in modalità di produzione? Ho provato un percorso inesistente e ho ricevuto una pagina di errore simile che ho fatto in fase di sviluppo.

Ho pensato che se nel modello di produzione, ottengo la pagina di errore 404 che si trova nella mia cartella / public.

Significa che non è stato avviato in modalità di produzione?

Grazie per l'aiuto.

Risposte:


34

2 semplici modi:

tail -f log/production.log

se ci sono voci che popolano quel registro dopo aver premuto l'app, sei in modalità di produzione.

secondo modo:

in una delle tue visualizzazioni (probabilmente il layout è buono), aggiungi semplicemente

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

E questo ti mostrerà in quale ambiente stai correndo.

modificare

Vedrai la pagina di eccezione predefinita invece delle pagine di errore effettive su qualsiasi ambiente se la richiesta è considerata "locale" (ovvero da localhost o 127.0.0.1), puoi sovrascriverla aggiungendola al tuo ApplicationController

def local_request?
  false
end

Puoi trovare questo metodo nei documenti in api


Non riesco a trovare il secondo modo di lavorare, ma ci sono voci nel mio production.log che dicono che ho creato un'attività alla volta X. Allora perché non ricevo la pagina di errore 404 corretta? Devo specificare da qualche parte per fornire la pagina di errore corretta? Grazie per l'aiuto.
inviato il

Ho ricevuto un errore a mio avviso e ho dovuto usare invece l'approccio di @ Krishnaprasad.
Besi

5
Si prega di notare che RAILS_ENVè deprecato. Usa Rails.envinvece.
Soullivaneuh

238

Se è Rails 3.1+, Rails.env.production?tornerà truequando sarà in produzione.

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

2
>> Rails.envtramite rails cappare per visualizzare per qualsiasi modalità.
obfk

6
Rails.env.development?anche disponibile.
hlcs

Tutto ciò con un punto interrogativo è disponibile. Rails.envè una stringa decorata con ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer,

Come nota, funziona anche nella console di rails. Su un server di produzione sono stato in grado di eseguire: rails console, quindi il comando sopra.
Ryan

28

Per le versioni moderne di Rails (3+), Rails.envrestituisce l'ambiente come String:

Rails.env #=> "production"

Esistono anche utili accessori per ogni ambiente che restituiranno un Boolean:

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


3

Ho trovato molto più semplice riavviare il server rails e leggere la seconda riga sulla riga di comando:

rails s -e productionUscite in esecuzione :

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

Nell'esempio c'era Webrick, ma alcune persone non capivano come cambiare server avrebbe semplicemente sostituito il nome. Aggiornato per chiarezza.


8
Nessuno sano di mente sta usando WEBricknella produzione.
Hauleth

Hauleth ha assolutamente ragione. Questo è semplicemente per testare in quale ambiente ti trovi durante lo sviluppo.
bkunzi01

Se questa risposta è trolling, è maestria! Congratulazioni!
JD.

-2

alternativa alla riga di comando

$ echo $ RAILS_ENV


Questo non funzionerà se il server è stato avviato con una variabile ENV inline. Detto questo, se ciò è stato fatto, uno script / alias / etc dovrebbe risiedere da qualche parte su disco, che includerà RAILS_ENV var. È possibile cercarlo sul disco, ad esempio conack
New Alexandria

questo non funziona .... cosa c'è nella variabile e come sta ottenendo l'ambiente ???
zee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.