Alterar um aplicativo Rails para produção


190

Como posso alterar meu aplicativo Rails para executar no modo de produção? Existe um arquivo de configuração, environment.rb, por exemplo, para fazer isso?


2
Parece que a segunda resposta tem muito mais votos. Você gostaria de fazer uma revisão rápida e aceitar a segunda resposta, a menos que tenha algum problema com ela? Apenas ajudará futuros visitantes. Thx :)
Evolve

Respostas:


73

Como configurar e executar um aplicativo Rails 4 no modo Produção (passo a passo) usando o Apache e o Phusion Passenger:

Normalmente, você poderá entrar no seu projeto Rails rails se obter uma versão de desenvolvimento do seu aplicativo em http://something.com:3000 . O modo de produção é um pouco mais complicado de configurar.

Estou brincando com isso há um tempo, então achei que escreveria isso para os novatos (como eu). Existem alguns pequenos ajustes que estão espalhados pela Internet e concluímos que isso pode ser mais fácil.

  1. Consulte este guia para obter a configuração principal do servidor (CentOS 6, mas deve aplicar-se a quase todos os tipos de Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-with-apache-and-passenger-on-centos-6

  2. Certifique-se de que, após a instalação do Passenger, você edite o /etc/httpd/conf/httpd.confarquivo para refletir sua estrutura de diretórios. Você deseja apontar o DocumentRoot para a pasta pública / projeto do Rails em qualquer lugar do httpd.confarquivo que possua esse tipo de diretório: /var/www/html/your_application/publicprecisa ser atualizado ou tudo ficará muito frustrante. Não posso enfatizar isso o suficiente.

  3. Reinicie o servidor (ou Apache, no mínimo - service httpd restart)

  4. Digite sua pasta de projeto do Rails /var/www/html/your_applicatione inicie a migração rake db:migrate. Verifique se existe uma tabela de banco de dados, mesmo se você planeja adicionar tabelas posteriormente (isso também faz parte da etapa 1).

  5. RAILS_ENV=production rake secret- isso criará uma chave_ secreta à qual você pode adicionar config/secrets.yml. Você pode copiar / colar isso em config / secrets.yml com o objetivo de fazer as coisas funcionarem, embora eu recomendo que você não faça isso. Pessoalmente, eu faço essa etapa para garantir que tudo funcione, em seguida, altero-a novamente e a fonte mais tarde.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilese você estiver servindo ativos estáticos. Isso enviará arquivos de imagem js, css para a /publicpasta.

  8. RAILS_ENV=production rails s

Nesse momento, seu aplicativo deve estar disponível em http://something.com/whatevervez de :3000. Caso contrário, passenger-memory-statse veja se existe uma entrada como908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Provavelmente perdi algo hediondo, mas isso funcionou para mim no passado.


2
Eu sinto que esta resposta deve ser migrada para a documentação do stackoverflow.
Whitecat

Eu acrescentaria que, se você não quiser usar um conteúdo da Web entregue como o apache, poderá adicionar um RAILS_SERVE_STATIC_FILES = 1 ao lado da produção RAILS_ENV =, isso significaria que os trilhos serviriam todos os arquivos, portanto não recomendam isso para um estado de produção real ...
3d0

351

Isso seria agora

rails server -e production

Ou, mais compacto

rails s -e production

Funciona para trilhos com mais de 3 projetos.


33
ou a versão curtarails s -e production
Pavel Nikolov

2
E os serviços em nuvem como o Heroku? Como correr server -e productioncom eles?
Verde

Os serviços em nuvem geralmente têm opções para especificar o ambiente, mas neles productioné invariavelmente o padrão.
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

Resposta muito preferida, esta deve chegar à documentação do StackOverflow.
precisa saber é o seguinte

61

Se você estiver executando no Passenger , o padrão é executar na produção, no seu apache conf:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

Se você está apenas executando um servidor local com mongrel ou webrick, pode:

./script/server -e production

ou no bash:

RAILS_ENV=production ./script/server

na verdade, substituir a constante RAILS_ENV no ambiente.rb provavelmente deve ser seu último recurso, pois provavelmente não permanecerá definido (veja outra resposta que eu dei sobre isso)


54

Se a sugestão do mipadi não funcionar, adicione-o ao config / environment.rb

# force Rails into production mode when                          
# you don't control web/app server and can't set it the proper way                  
ENV['RAILS_ENV'] ||= 'production'

E os serviços em nuvem como o Heroku? ENV['RAILS_ENV'] ||= 'production'Também pode ser aplicado a eles?
Verde

Eu editei este arquivo longo para trás e esqueci .. graças para lembrar .. muito salvo de tempo
Agnes



18

Você também pode passar o ambiente para script / servidor:

$ script/server -e production

12
rails s -e production

Isso executará o servidor com RAILS_ENV= 'production'.

Além disso, você deve definir o caminho dos ativos em production.rb

config.serve_static_assets = true

Sem isso, seus ativos não serão carregados.


Desculpe ... votou para baixo quando deveria votar. Foi feita uma pequena edição para corrigir o erro e o voto positivo.
tomd 29/09/15

7
RAILS_ENV=production rails s

OU

rails s -e production

Por padrão, o ambiente é desenvolvimento.


5

Como outros postaram: rails server -e production

Ou, meu favorito pessoal: RAILS_ENV=production rails s


2

No Rails 3

Adicionando Rails.env = ActiveSupport::StringInquirer.new('production')ao application.rb e rails sfuncionará da mesma forma querails server -e production

module BlacklistAdmin
  class Application < Rails::Application

    config.encoding = "utf-8"
    Rails.env = ActiveSupport::StringInquirer.new('production')

    config.filter_parameters += [:password]
  end
end

2

Não é uma boa maneira de executar o servidor rails no ambiente de produção "rails server -e production", porque o rails é executado como um aplicativo de thread único e só pode responder a uma solicitação HTTP por vez.

O melhor artigo sobre ambiente de produção para trilhos é Ambientes de produção - Rails 3


3
Fazer a ligação podridão ... acessível em máquina do tempo, porém: ligação
rosuav

1

para servidor padrão: produção de rails s -e

para porta do servidor de costum: produção de trilhos s -p [port] -e, por exemplo. produção de trilhos s -p 3002 -e


1

Por padrão, o servidor é executado no ambiente de desenvolvimento: $ rails s

Se você estiver executando no ambiente de produção: $ rails s -e productionou$ RAILS_ENV=production rails s


0

Verifique se você fez o seguinte no arquivo environment.rb.

ENV ['RAILS_ENV'] || = 'produção'

Se o seu aplicativo for executado em um ambiente de hospedagem compartilhada ou em um passageiro, talvez seja necessário fazer alterações no .httaccess (dentro da pasta pública) e definir o modo de produção.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.