Como saber se trilhos estão em produção?

86

Eu costumava script/server -e productioniniciar o Rails no modo de produção. Sim, e não tive erros. No entanto, como posso saber se está em modo de produção? Tentei uma rota inexistente e recebi uma página de erro semelhante à que fiz no desenvolvimento.

Pensei que se estivesse no modelo de produção, recebo a página de erro 404 que está na minha pasta / public.

Isso significa que não começou no modo de produção?

Obrigado pela ajuda.

sent-hil
fonte

Respostas:

34

2 maneiras fáceis:

tail -f log/production.log

se houver entradas preenchendo esse log depois de acessar o aplicativo, você está no modo de produção.

segunda maneira:

em uma de suas visualizações (provavelmente o layout é bom), basta adicionar

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

E isso mostrará qual é o ambiente em que você está executando.

editar

Você verá a página de exceção padrão em vez das páginas de erro reais em qualquer ambiente se a solicitação for considerada "local" (ou seja, de localhost ou 127.0.0.1), você pode substituí-la adicionando-a ao seu ApplicationController

def local_request?
  false
end

Você pode encontrar esse método nos documentos da API

Dan McNevin
fonte
Não consigo fazer a segunda maneira funcionar, mas há entradas em meu production.log informando que criei uma tarefa na hora X. Então, por que não estou obtendo a página de erro 404 correta? Devo especificar um local para fornecer a página de erro correta? Obrigado pela ajuda.
enviado em
Recebi um erro em minha opinião e tive que usar a abordagem de @Krishnaprasad.
Besi
5
Observe que RAILS_ENVestá obsoleto. Use em seu Rails.envlugar.
Soullivaneuh 01 de
238

Se for Rails 3.1+, Rails.env.production?retornará truequando estiver em produção.

Rails.env.production?  #=> true  
Rails.env.staging?     #=> false
Rails.env.development? #=> false  
Krishnaprasad Varma
fonte
2
>> Rails.envvia rails caparece para exibir para qualquer modo.
obfk
6
Rails.env.development?também disponível.
hlcs
Tudo com um ponto de interrogação está disponível. Rails.envé uma corda decorada com ActiveSupport::StringInquirer. api.rubyonrails.org/classes/ActiveSupport/StringInquirer.html
Sebastian vom Meer
Apenas como uma observação, isso também funciona no console de trilhos. Em um servidor de produção, consegui executar: console do rails e o comando acima.
Ryan,
28

Para versões Rails modernas (3+), Rails.envretorna o ambiente como String:

Rails.env #=> "production"

Também existem acessores úteis para cada ambiente que retornará um Boolean:

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

Em seu tipo de linha de comando rails console, então Rails.env.

Karolis Ramanauskas
fonte
3

Achei muito mais fácil apenas reiniciar o servidor Rails e ler a segunda linha na linha de comando:

rails s -e productionSaídas em execução :

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

Tinha Webrick no exemplo, mas algumas pessoas não entenderam como mudar os servidores apenas substituiria o nome. Atualizado para maior clareza.

bkunzi01
fonte
8
Ninguém sã está usando WEBrickna produção.
Hauleth
Hauleth está absolutamente correto. Isso é simplesmente para testar em qual ambiente você está durante o desenvolvimento.
bkunzi01
Se essa resposta for trollagem, é mestria! Parabéns!
JD.
-2

alternativa de linha de comando

$ echo $ RAILS_ENV

vireshas
fonte
Isso não funcionará se o servidor foi iniciado com um ENV var embutido. Dito isso, se isso foi feito, um script / alias / etc deve estar em algum lugar no disco, que incluirá o RAILS_ENV var. Pode-se pesquisar o disco, como comack
Nova Alexandria
isso não funciona .... o que tem na variável e como está pegando o ambiente ???
zee