Come posso modificare la mia applicazione Rails per l'esecuzione in modalità produzione? Esiste un file di configurazione, ad esempio environment.rb, per farlo?
Come posso modificare la mia applicazione Rails per l'esecuzione in modalità produzione? Esiste un file di configurazione, ad esempio environment.rb, per farlo?
Risposte:
Come configurare ed eseguire un'app Rails 4 in modalità Produzione (passo-passo) usando Apache e Phusion Passenger:
Normalmente potresti accedere al tuo progetto Rails rails s
e ottenere una versione di sviluppo della tua app su http://something.com:3000 . La modalità di produzione è un po 'più complicata da configurare.
Ho fatto un casino con questo per un po ', quindi ho pensato di scriverlo per i neofiti (come me). Ci sono alcune piccole modifiche che sono diffuse su Internet e hanno pensato che questo potrebbe essere più facile.
Fare riferimento a questa guida per l'installazione di base del server (CentOS 6, ma dovrebbe applicarsi a quasi tutte le versioni di Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-con-apache-e-passeggeri-on-centos-6
Assicurati che dopo aver impostato Passenger hai modificato il /etc/httpd/conf/httpd.conf
file per riflettere la struttura della tua directory. Vuoi puntare DocumentRoot al tuo progetto Rails / cartella pubblica Ovunque nel httpd.conf
file che ha questo tipo di dir: /var/www/html/your_application/public
deve essere aggiornato o tutto diventerà molto frustrante. Non posso sottolineare abbastanza.
Riavvia il server (o almeno Apache - service httpd restart
)
Immettere la cartella del progetto Rails /var/www/html/your_application
e iniziare la migrazione con rake db:migrate
. Assicurarsi che esista una tabella di database, anche se si prevede di aggiungere tabelle in un secondo momento (anche questo fa parte del passaggio 1).
RAILS_ENV=production rake secret
- questo creerà una chiave segreta che puoi aggiungere config/secrets.yml
. È possibile copiare / incollare questo in config / secrets.yml per il gusto di fare le cose in esecuzione, anche se vi consiglio di non farlo. Personalmente, faccio questo passaggio per assicurarmi che tutto il resto funzioni, quindi lo cambio di nuovo e lo fonte in un secondo momento.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
se stai servendo risorse statiche. Questo spingerà i file js, css, image nella /public
cartella.
RAILS_ENV=production rails s
A questo punto la tua app dovrebbe essere disponibile al http://something.com/whatever
posto di :3000
. In caso contrario, passenger-memory-stats
e vedere se c'è una voce simile908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
Probabilmente ho perso qualcosa di odioso, ma in passato ha funzionato per me.
Questo sarebbe ora
rails server -e production
O, più compatto
rails s -e production
Funziona con rotaie 3+ progetti.
rails s -e production
server -e production
su di loro?
production
è sempre l'impostazione predefinita.
echo "export RAILS_ENV=production" >> ~/.bash_profile
Se stai utilizzando Passenger , l'impostazione predefinita è l'esecuzione in produzione, nella conf apache:
<VirtualHost *:80>
ServerName application_name.rails.local
DocumentRoot "/Users/rails/application_name/public"
RailsEnv production ## This is the default
</VirtualHost>
Se stai eseguendo un server locale con ibrido o webrick, puoi fare:
./script/server -e production
o in bash:
RAILS_ENV=production ./script/server
in realtà l'override della costante RAILS_ENV in enviornment.rb dovrebbe probabilmente essere la tua ultima risorsa, poiché probabilmente non rimarrà impostato (vedi un'altra risposta che ho dato su questo)
Se il suggerimento di mipadi non funziona, aggiungilo a 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'
essere applicato anche su di loro?
Cambia la variabile d'ambiente RAILS_ENV
in production
.
~/.bashrc
o ~/.bash_profile
o semplicementeexport RAILS_ENV=production"
rails s -e production
Questo eseguirà il server con RAILS_ENV
= 'production'
.
A parte questo, devi impostare il percorso delle risorse production.rb
config.serve_static_assets = true
Senza questo le tue risorse non verranno caricate.
In Rails 3
Aggiungendo Rails.env = ActiveSupport::StringInquirer.new('production')
in application.rb e rails s
funzionerà comerails 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
Non è un buon modo per eseguire il server rails nell'ambiente di produzione mediante "rails server -e production", perché allora i rails vengono eseguiti come un'applicazione a thread singolo e possono rispondere solo a una richiesta HTTP alla volta.
Il miglior articolo sull'ambiente di produzione per le rotaie è Ambienti di produzione - Rotaie 3
per server predefinito: rails s -e production
per porta server costum: rails s -p [port] -e produzione, ad es. rotaie s -p 3002 -e produzione
Per impostazione predefinita, il server funziona sull'ambiente di sviluppo: $ rails s
Se si esegue in ambiente di produzione: $ rails s -e production
o$ RAILS_ENV=production rails s
Assicurati di aver fatto di seguito nel tuo file environment.rb.
ENV ['RAILS_ENV'] || = 'produzione'
Se l'applicazione viene eseguita in un ambiente di hosting condiviso o phushion passenger, potrebbe essere necessario apportare modifiche a .httaccess (all'interno della cartella pubblica) e impostare la modalità come produzione.