Changer une application Rails en production
Comment puis-je changer mon application Rails pour qu'elle s'exécute en mode production? Y at-il un fichier de configuration, environnement.rb par exemple, pour le faire?
15 réponses
Comment configurer et exécuter une application Rails 4 en Mode Production (étape par étape) en utilisant Apache et Phusion Passenger:
Normalement, vous pouvez entrer votre projet Rails, rails s
, et obtenir une version de développement de votre application à http://something.com:3000 . le mode de Production est un peu plus délicat à configurer.
Je me suis amusé avec ça pendant un moment, alors j'ai pensé que j'écrirais ça pour les débutants (comme moi). Il y a quelques petits réglages qui sont répartis tout au long de l'internet et pensé que cela pourrait être plus facile.
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-with-apache-and-passenger-on-centos-6
Assurez-vous qu'après la configuration de Passenger, vous avez modifié le fichier
/etc/httpd/conf/httpd.conf
pour refléter la structure de votre répertoire. vous voulez pointer DocumentRoot à votre projet Rails /dossier public N'importe où dans le fichierhttpd.conf
qui a ce genre de répertoire:/var/www/html/your_application/public
doit être mis à jour ou tout deviendra très frustrant. Je ne peux pas insister assez sur ce point.Redémarrez le serveur (Apache, à tout le moins -
service httpd restart
)Entrez votre dossier de projet Rails
/var/www/html/your_application
et démarrez la migration avecrake db:migrate
. Assurez-vous qu'une table de base de données existe, même si vous prévoyez d'ajouter des tables plus tard (cela fait également partie de l'étape 1).RAILS_ENV=production rake secret
- cela va créer un secret_key que vous pouvez 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 le changer et le sourcer plus tard.RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
si vous servez de l'statique actifs. Cela poussera les fichiers JS, CSS, image dans le/public
dossier.RAILS_ENV=production rails s
, À ce stade, votre application devrait être disponible à http://something.com/whatever
au lieu de :3000
. Si non, passenger-memory-stats
et voir s'il y a une entrée comme 908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname
J'ai probablement manqué quelque chose d'odieux, mais cela a fonctionné pour moi dans le passé.
Ce serait maintenant
rails server -e production
Ou, plus compact
rails s -e production
Cela fonctionne pour les projets rails 3+.
Si vous utilisez Passenger, la valeur par défaut est de s'exécuter en production, dans votre conf apache:
<VirtualHost *:80>
ServerName application_name.rails.local
DocumentRoot "/Users/rails/application_name/public"
RailsEnv production ## This is the default
</VirtualHost>
Si vous exécutez simplement un serveur local avec mongrel ou webrick, vous pouvez faire:
./script/server -e production
Ou en bash:
RAILS_ENV=production ./script/server
Remplace réellement la constante RAILS_ENV dans l'environnement.rb devrait probablement être votre dernier recours, car il ne va probablement pas rester en place (Voir une autre réponse que j'ai donnée à ce sujet)
Vous pouvez également passer l'environnement au script / serveur:
$ script/server -e production
rails s -e production
Cela va démarrer 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.
RAILS_ENV=production rails s
Ou
rails s -e production
Par défaut, l'environnement est le développement.
, Comme d'autres l'ont posté: rails server -e production
Ou encore, mon préféré: RAILS_ENV=production
rails s
Dans Rails 3
Ajout d'Rails.env = ActiveSupport::StringInquirer.new('production')
dans l'application.rb et rails s
fonctionneront comme rails 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
Ce n'est pas un bon moyen d'exécuter rails server dans l'environnement de production par "rails server-E production", car rails s'exécute alors comme une application mono-thread et ne peut répondre qu'à une requête HTTP à la fois.
Le meilleur article sur l'environnement de production pour rails est environnements de Production-Rails 3
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
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 production
ou $ RAILS_ENV=production rails s
Veuillez vous assurer que vous avez fait ci-dessous dans votre environnement.fichier rb.
ENV ['RAILS_ENV'] / / = 'production'
Si votre application s'exécute dans un environnement d'hébergement partagé ou phushion passenger, vous devrez peut-être apporter des modifications .htttaccess (dans le dossier public) et définir le mode de production.