Changer une application Rails en production


190

Comment puis-je modifier mon application Rails pour qu'elle s'exécute en mode production? Existe-t-il un fichier de configuration, environment.rb par exemple, pour faire cela?


2
Il semble que la deuxième réponse a beaucoup plus de votes, seriez-vous prêt à l'examiner rapidement et à accepter la deuxième réponse à moins que vous n'ayez un problème avec elle. Aidera simplement les futurs visiteurs. Thx :)
Evolve

Réponses:


73

Comment configurer et exécuter une application Rails 4 en mode Production (étape par étape) à l'aide d'Apache et de Phusion Passenger:

Normalement, vous pourrez entrer votre projet Rails rails set obtenir une version de développement de votre application à l' adresse http://something.com:3000 . Le mode production est un peu plus délicat à configurer.

Je m'amuse avec ça depuis un moment, alors j'ai pensé que j'écrirais ça pour les débutants (comme moi). Il y a quelques petites modifications qui sont réparties sur Internet et qui ont pensé que cela pourrait être plus facile.

  1. Reportez-vous à ce guide pour la configuration de base du serveur (CentOS 6, mais il devrait s'appliquer à presque toutes les versions Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-avec-apache-et-passager-sur-centos-6

  2. Assurez-vous qu'après la configuration de Passenger, vous avez modifié le /etc/httpd/conf/httpd.conffichier pour refléter la structure de votre répertoire. Vous voulez faire pointer DocumentRoot vers votre projet / dossier public Rails N'importe où dans le httpd.conffichier qui a ce type de dir: /var/www/html/your_application/publicdoit être mis à jour ou tout deviendra très frustrant. Je ne peux insister assez sur ce point.

  3. Redémarrez le serveur (ou Apache au moins - service httpd restart)

  4. Entrez votre dossier de projet Rails /var/www/html/your_applicationet démarrez la migration avec rake db:migrate. Assurez-vous qu'une table de base de données existe, même si vous prévoyez d'ajouter des tables ultérieurement (cela fait également partie de l'étape 1).

  5. RAILS_ENV=production rake secret- cela créera une clé secrète que vous pourrez ajouter config/secrets.yml. Vous pouvez copier / coller ceci dans config / secrets.yml pour faire fonctionner les choses, bien que je vous recommande de ne pas le faire. Personnellement, je fais cette étape pour m'assurer que tout le reste fonctionne, puis changez-le et sourcez-le plus tard.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilesi vous diffusez des actifs statiques. Cela poussera les fichiers js, css, image dans le /publicdossier.

  8. RAILS_ENV=production rails s

À ce stade, votre application devrait être disponible au http://something.com/whateverlieu de :3000. Sinon, passenger-memory-statset voyez s'il y a une entrée comme908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

J'ai probablement raté quelque chose d'odieux, mais cela a fonctionné pour moi dans le passé.


2
Je pense que cette réponse devrait être migrée vers la documentation de stackoverflow.
Whitecat

J'ajouterais que si vous ne voulez pas utiliser un contenu Web comme Apache, vous pouvez ajouter un RAILS_SERVE_STATIC_FILES = 1 à côté de RAILS_ENV = production, cela signifierait que les rails serviraient chaque fichier, donc je ne le recommanderais pas pour un état de la production réelle ...
3d0

351

Ce serait maintenant

rails server -e production

Ou, plus compact

rails s -e production

Cela fonctionne pour les projets de rails 3+.


33
ou la version courterails s -e production
Pavel Nikolov

2
Qu'en est-il des services cloud comme Heroku? Comment courir server -e productiondessus?
Vert

Les services cloud ont généralement des options pour spécifier l'environnement, mais productionc'est invariablement la valeur par défaut.
James Billingham

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

Réponse de loin préférée, celle-ci devrait être intégrée à la documentation de StackOverflow.
dmanexe

61

Si vous utilisez Passenger , la valeur par défaut est de s'exécuter en production, dans votre configuration apache:

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

Si vous utilisez juste un serveur local avec mongrel ou webrick, vous pouvez faire:

./script/server -e production

ou en bash:

RAILS_ENV=production ./script/server

en fait, remplacer la constante RAILS_ENV dans enviornment.rb devrait probablement être votre dernier recours, car il ne restera probablement pas défini (voir une autre réponse que j'ai donnée à ce sujet)


54

Si la suggestion de mipadi ne fonctionne pas, ajoutez ceci à 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'

Qu'en est-il des services cloud comme Heroku? Peut ENV['RAILS_ENV'] ||= 'production'être appliqué sur eux aussi?
Vert

J'ai édité ce fichier il y a longtemps et j'ai oublié .. merci pour le rappel .. gagné beaucoup de temps
Agnes

19

Remplacez la variable d'environnement RAILS_ENVpar production.


3
où se trouve la variable d'environnement?
BKSpurgeon

peut être situé dans ~/.bashrcou ~/.bash_profileou simplementexport RAILS_ENV=production"
Shimaa Marzouk


18

Vous pouvez également transmettre l'environnement au script / serveur:

$ script/server -e production

12
rails s -e production

Cela exécutera le serveur avec RAILS_ENV= 'production'.

En dehors de cela, vous devez définir le chemin des actifs dans production.rb

config.serve_static_assets = true

Sans cela, vos actifs ne seront pas chargés.


Désolé ... a voté contre alors qu'il était censé voter. Fait de légères modifications afin de corriger l'erreur et le vote favorable.
tomd

7
RAILS_ENV=production rails s

OU

rails s -e production

Par défaut, l'environnement est le développement.


5

Comme d'autres l'ont signalé: rails server -e production

Ou, mon préféré: RAILS_ENV=production rails s


2

Dans les rails 3

L'ajout Rails.env = ActiveSupport::StringInquirer.new('production')dans l'application.rb et rails sfonctionnera de la même manière 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

Ce n'est pas un bon moyen d'exécuter des rails server dans un environnement de production en "rails server -e production", car les rails s'exécutent alors comme une application monothread et ne peuvent répondre qu'à une seule requête HTTP à la fois.

Le meilleur article sur l'environnement de production pour les rails est Environnements de production - Rails 3


3
Link rot ... disponible sur wayback machine cependant: lien
rosuav

1

pour le serveur par défaut: rails s -e production

pour le port du serveur costum: rails s -p [port] -e production, par exemple. rails s -p 3002 -e production


1

Par défaut, le serveur s'exécute sur l'environnement de développement: $ rails s

Si vous utilisez un environnement de production: $ rails s -e productionou$ RAILS_ENV=production rails s


0

Veuillez vous assurer que vous avez fait ci-dessous dans votre fichier environment.rb.

ENV ['RAILS_ENV'] || = 'production'

Si votre application s'exécute dans un environnement d'hébergement partagé ou un passager phushion, vous devrez peut-être apporter des modifications dans .httaccess (dans le dossier public) et définir le mode comme production.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.