Comment changer mon application Rails pour qu'elle s'exécute en mode production? Existe-t-il un fichier de configuration, environment.rb par exemple, pour le faire?
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:30 . Le mode de production est un peu plus délicat à configurer.
Cela fait un moment que je plaisante avec ça, alors je me suis dit que je l'écrirais pour les débutants (comme moi-même). Il y a quelques petites modifications qui sont réparties sur Internet et qui ont figuré que cela pourrait être plus facile.
Reportez-vous à ce guide pour la configuration de base du serveur (CentOS 6, mais cela devrait s'appliquer à presque toutes les versions de Linux): https://www.digitalocean.com/community/tutorials/how-to-setup-a -Rails-4-app-with-Apache-and-passagers-centos-6
Assurez-vous absolument qu'après la configuration de Passenger, vous avez modifié le fichier /etc/httpd/conf/httpd.conf
afin de refléter la structure de votre répertoire. Vous voulez faire en sorte que DocumentRoot soit dirigé vers votre Rails projet/dossier public n'importe où dans le fichier httpd.conf
contenant ce type de fichier. 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 au moins Apache - service httpd restart
)
Entrez votre Rails dossier de projet /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 envisagez 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 afin de 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 change en arrière et le source plus tard.
Rails_ENV=production rake db:migrate
Rails_ENV=production rake assets:precompile
si vous gérez des actifs statiques. Ceci poussera les fichiers js, css, image dans le dossier /public
.
Rails_ENV=production Rails s
À ce stade, votre application devrait être disponible sur http://something.com/whatever
au lieu de :3000
. Sinon, passenger-memory-stats
et voir s’il existe 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 Rails plus de 3 projets.
Si vous utilisez Passenger , la configuration par défaut est de fonctionner 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 utilisez juste un serveur local avec mongrel ou webrick, vous pouvez faire:
./script/server -e production
ou en bash:
Rails_ENV=production ./script/server
remplacer la constante Rails_ENV dans le fichier enviornment.rb devrait probablement être votre dernier recours, car il ne va probablement pas rester en place (voir autre réponse que j'ai donnée à ce sujet)
Si 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'
Remplacez la variable d'environnement Rails_ENV
par production
.
$> export Rails_ENV=production
Vous pouvez également transmettre l'environnement à script/serveur:
$ script/server -e production
Rails s -e production
Ceci 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 biens ne seront pas chargés.
Rails_ENV=production Rails s
OR
Rails s -e production
Par défaut, l'environnement est le développement.
Comme d'autres l'ont posté: Rails server -e production
Ou, mon préféré: Rails_ENV=production
Rails s
Dans Rails
Ajouter Rails.env = ActiveSupport::StringInquirer.new('production')
dans le fichier application.rb et Rails s
fonctionnera de la même manière que 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 serveur dans un environnement de production avec "Rails serveur -e production", car alors Rails s'exécute en tant qu'application à un seul 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
pour le serveur par défaut: Rails s -e production
pour le port du serveur personnalisé: Rails s -p [port] -e production, par exemple. Rails s -p 3002 -e production
Par défaut, le serveur est exécuté sur l'environnement de développement: $ Rails s
Si vous utilisez l'environnement de production: $ Rails s -e production
ou $ Rails_ENV=production Rails s
Assurez-vous que vous avez terminé 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 dans un passager phushion, vous devrez peut-être modifier le fichier .httaccess (dans le dossier public) et définir le mode de production.