web-dev-qa-db-fra.com

Passer une application Rails en production

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?

188
Adler Medrado

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.

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

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

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

  4. 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).

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

  6. Rails_ENV=production rake db:migrate

  7. Rails_ENV=production rake assets:precompile si vous gérez des actifs statiques. Ceci poussera les fichiers js, css, image dans le dossier /public.

  8. 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é.

69
etusm

Ce serait maintenant

Rails server -e production

Ou plus compact

Rails s -e production

Cela fonctionne pour Rails plus de 3 projets.

350
BandsOnABudget

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)

61
Dan McNevin

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'
54
Pete

Remplacez la variable d'environnement Rails_ENV par production.

19
mipadi
$> export Rails_ENV=production
19
Evolve

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

$ script/server -e production
18
foz
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.

12
prasann
Rails_ENV=production Rails s

OR

Rails s -e production

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

6
puneet18

Comme d'autres l'ont posté: Rails server -e production

Ou, mon préféré: Rails_ENV=productionRails s

5
alex1sz

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
2
RSK

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

2
Evgeny Liskovets

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

1
user3786185

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

1
Pankaj Dhote

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.

0
Rakesh