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?
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?
Réponses:
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 s
et 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.
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
Assurez-vous qu'après la configuration de Passenger, vous avez modifié le /etc/httpd/conf/httpd.conf
fichier 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.conf
fichier qui a ce type de dir: /var/www/html/your_application/public
doit être mis à jour ou tout deviendra très frustrant. Je ne peux insister assez sur ce point.
Redémarrez le serveur (ou Apache au moins - service httpd restart
)
Entrez votre dossier de projet Rails /var/www/html/your_application
et 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).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
si vous diffusez des actifs statiques. Cela poussera les fichiers js, css, image dans le /public
dossier.
RAILS_ENV=production rails s
À ce stade, votre application devrait être disponible au http://something.com/whatever
lieu de :3000
. Sinon, passenger-memory-stats
et 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é.
Ce serait maintenant
rails server -e production
Ou, plus compact
rails s -e production
Cela fonctionne pour les projets de rails 3+.
rails s -e production
server -e production
dessus?
production
c'est invariablement la valeur par défaut.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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)
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'
ENV['RAILS_ENV'] ||= 'production'
être appliqué sur eux aussi?
Remplacez la variable d'environnement RAILS_ENV
par production
.
~/.bashrc
ou ~/.bash_profile
ou simplementexport RAILS_ENV=production"
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.
Dans les rails 3
L'ajout Rails.env = ActiveSupport::StringInquirer.new('production')
dans l'application.rb et rails s
fonctionnera 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
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
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 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.