Cambia un'applicazione Rails in produzione


190

Come posso modificare la mia applicazione Rails per l'esecuzione in modalità produzione? Esiste un file di configurazione, ad esempio environment.rb, per farlo?


2
Sembra che la seconda risposta abbia molti più voti, saresti disposto a dare una rapida recensione e ad accettare la seconda risposta a meno che tu non abbia qualche problema. Aiuterà solo i futuri visitatori. Grazie :)
Evolve il

Risposte:


73

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 se 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.

  1. 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

  2. Assicurati che dopo aver impostato Passenger hai modificato il /etc/httpd/conf/httpd.conffile per riflettere la struttura della tua directory. Vuoi puntare DocumentRoot al tuo progetto Rails / cartella pubblica Ovunque nel httpd.conffile che ha questo tipo di dir: /var/www/html/your_application/publicdeve essere aggiornato o tutto diventerà molto frustrante. Non posso sottolineare abbastanza.

  3. Riavvia il server (o almeno Apache - service httpd restart)

  4. Immettere la cartella del progetto Rails /var/www/html/your_applicatione 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).

  5. 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.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilese stai servendo risorse statiche. Questo spingerà i file js, css, image nella /publiccartella.

  8. RAILS_ENV=production rails s

A questo punto la tua app dovrebbe essere disponibile al http://something.com/whateverposto di :3000. In caso contrario, passenger-memory-statse 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.


2
Sento che questa risposta dovrebbe essere migrata alla documentazione di StackOverflow.
Whitecat,

Aggiungo che se non si desidera utilizzare un contenuto Web come apache, è possibile aggiungere un RAILS_SERVE_STATIC_FILES = 1 accanto alla produzione RAILS_ENV =, ciò significherebbe che le rotaie serviranno tutti i file, quindi non lo consigliamo per un stato di produzione reale ...
3d0

351

Questo sarebbe ora

rails server -e production

O, più compatto

rails s -e production

Funziona con rotaie 3+ progetti.


33
o la versione cortarails s -e production
Pavel Nikolov il

2
Che dire dei servizi cloud come Heroku? Come correre server -e productionsu di loro?
Verde

I servizi cloud di solito hanno opzioni per specificare l'ambiente, ma in essi productionè sempre l'impostazione predefinita.
James Billingham,

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

Risposta molto preferita, questa dovrebbe arrivare alla documentazione StackOverflow.
dmanexe,

61

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)


54

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'

Che dire dei servizi cloud come Heroku? Può ENV['RAILS_ENV'] ||= 'production'essere applicato anche su di loro?
Verde

Ho modificato questo file molto tempo fa e ho dimenticato .. grazie per averlo ricordato .. risparmiato molto tempo
Agnese

19

Cambia la variabile d'ambiente RAILS_ENVin production.


3
dove si trova la variabile d'ambiente?
BKSpurgeon,

potrebbe trovarsi in ~/.bashrco ~/.bash_profileo semplicementeexport RAILS_ENV=production"
Shimaa Marzouk il


18

È inoltre possibile passare l'ambiente a script / server:

$ script/server -e production

12
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.


Scusate ... ho votato verso il basso quando si intende votare. Sono state apportate lievi modifiche per correggere errori e voti positivi.
tomd

7
RAILS_ENV=production rails s

O

rails s -e production

Di default l'ambiente è sviluppo.


5

Come altri hanno pubblicato: rails server -e production

Oppure, il mio preferito: RAILS_ENV=production rails s


2

In Rails 3

Aggiungendo Rails.env = ActiveSupport::StringInquirer.new('production')in application.rb e rails sfunzionerà 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

2

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


3
Link rot ... disponibile sulla macchina del ritorno però: link
rosuav

1

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


1

Per impostazione predefinita, il server funziona sull'ambiente di sviluppo: $ rails s

Se si esegue in ambiente di produzione: $ rails s -e productiono$ RAILS_ENV=production rails s


0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.