Comment savoir si des rails sont en production?

86

J'avais l'habitude script/server -e productionde démarrer des rails en mode production. C'est le cas et je n'ai eu aucune erreur. Cependant, comment savoir s'il est en mode production? J'ai essayé une route inexistante et j'ai obtenu une page d'erreur similaire à celle que j'ai faite en développement.

Je pensais que si sous le modèle de production, j'obtiens la page d'erreur 404 qui se trouve dans mon dossier / public.

Cela signifie-t-il qu'il n'a pas démarré en mode production?

Merci de votre aide.

envoyé-hil
la source

Réponses:

34

2 moyens simples:

tail -f log/production.log

s'il y a des entrées qui remplissent ce journal après avoir accédé à l'application, vous êtes en mode production.

deuxième façon:

dans l'une de vos vues (probablement la mise en page est bonne), ajoutez simplement

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

Et cela vous montrera dans quel environnement vous travaillez.

Éditer

Vous verrez la page d'exception par défaut au lieu des pages d'erreur réelles sur n'importe quel environnement si la demande est considérée comme "locale" (c'est-à-dire de localhost ou 127.0.0.1), vous pouvez la remplacer en l'ajoutant à votre ApplicationController

def local_request?
  false
end

Vous pouvez trouver cette méthode dans la documentation de l' API

Dan McNevin
la source
Je ne parviens pas à obtenir la deuxième façon de travailler, mais il y a des entrées dans mon production.log indiquant que j'ai créé une tâche au temps X. Alors pourquoi est-ce que je n'obtiens pas la bonne page d'erreur 404? Dois-je spécifier quelque part pour fournir la bonne page d'erreur? Merci pour l'aide.
sent-hil
J'ai eu une erreur de mon point de vue et j'ai dû utiliser l'approche de @ Krishnaprasad à la place.
Besi
5
Veuillez noter qu'il RAILS_ENVest obsolète. Utilisez Rails.envplutôt.
Soullivaneuh
238

Si ses Rails 3.1+, Rails.env.production?reviendront truelors de la production.

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Krishnaprasad Varma
la source
2
>> Rails.envvia rails capparaît pour afficher pour n'importe quel mode.
obfk
6
Rails.env.development?aussi disponible.
hlcs
Tout avec un point d'interrogation est disponible. Rails.envest une chaîne décorée de ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer
Pour rappel, cela fonctionne également dans la console des rails. Sur un serveur de production, j'ai pu exécuter: console rails, puis la commande ci-dessus.
Ryan le
28

Pour les versions Rails modernes (3+), Rails.envrenvoie l'environnement sous la forme String:

Rails.env #=> "production"

Il existe également des accesseurs utiles pour chaque environnement qui renverront un Boolean:

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Dogweather
la source
8

Sur votre ligne de commande, tapez rails consolealors Rails.env.

Karolis Ramanauskas
la source
3

J'ai trouvé beaucoup plus facile de simplement redémarrer le serveur rails et de lire la deuxième ligne sur la ligne de commande:

rails s -e productionSorties en cours d'exécution :

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

Il y avait Webrick dans l'exemple mais certaines personnes ne comprenaient pas comment changer de serveur remplacerait simplement le nom. Mis à jour pour plus de clarté.

bkunzi01
la source
8
Personne ne l'utilise WEBricken production.
Hauleth le
Hauleth a tout à fait raison. Il s'agit simplement de tester dans quel environnement vous vous trouvez pendant le développement.
bkunzi01
Si cette réponse est trolling, c'est la maîtrise! Toutes nos félicitations!
JD.
-2

alternative à la ligne de commande

$ echo $ RAILS_ENV

vireshas
la source
Cela ne fonctionnera pas si le serveur a été démarré avec une variable ENV en ligne. Cela dit, si cela était fait, un script / alias / etc devrait se trouver quelque part sur le disque, qui inclura la variable RAILS_ENV. On peut rechercher sur le disque, par exemple avecack
New Alexandria
cela ne fonctionne pas .... ce qu'il y a dans la variable et comment il obtient l'environnement ???
zee