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?
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?
Respostas:
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 s
e 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.
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
Certifique-se de que, após a instalação do Passenger, você edite o /etc/httpd/conf/httpd.conf
arquivo 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.conf
arquivo que possua esse tipo de diretório: /var/www/html/your_application/public
precisa ser atualizado ou tudo ficará muito frustrante. Não posso enfatizar isso o suficiente.
Reinicie o servidor (ou Apache, no mínimo - service httpd restart
)
Digite sua pasta de projeto do Rails /var/www/html/your_application
e 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
se você estiver servindo ativos estáticos. Isso enviará arquivos de imagem js, css para a /public
pasta.
RAILS_ENV=production rails s
Nesse momento, seu aplicativo deve estar disponível em http://something.com/whatever
vez de :3000
. Caso contrário, passenger-memory-stats
e 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.
Isso seria agora
rails server -e production
Ou, mais compacto
rails s -e production
Funciona para trilhos com mais de 3 projetos.
rails s -e production
server -e production
com eles?
production
é invariavelmente o padrão.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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)
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'
ENV['RAILS_ENV'] ||= 'production'
Também pode ser aplicado a eles?
Mude a variável de ambiente RAILS_ENV
para production
.
~/.bashrc
ou ~/.bash_profile
simplesmenteexport RAILS_ENV=production"
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.
No Rails 3
Adicionando Rails.env = ActiveSupport::StringInquirer.new('production')
ao application.rb e rails s
funcionará 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
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
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
Por padrão, o servidor é executado no ambiente de desenvolvimento: $ rails s
Se você estiver executando no ambiente de produção: $ rails s -e production
ou$ RAILS_ENV=production rails s
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.