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 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.
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.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.
Reinicie o servidor (ou Apache, no mínimo - service httpd restart)
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).
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:precompilese você estiver servindo ativos estáticos. Isso enviará arquivos de imagem js, css para a /publicpasta.
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.
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 productioncom 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_ENVpara production.
~/.bashrcou ~/.bash_profilesimplesmenteexport 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 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
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 productionou$ 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.