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?

185
demandé sur the Tin Man 2009-12-23 00:18:02

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.

  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-with-apache-and-passenger-on-centos-6

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

  3. Redémarrez le serveur (Apache, à tout le moins - service httpd restart )

  4. 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 plus tard (cela fait également partie de l'étape 1).

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

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile si vous servez de l'statique actifs. Cela poussera les fichiers JS, CSS, image dans le /public dossier.

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

64
répondu etusm 2017-01-02 14:21:59

Ce serait maintenant

rails server -e production

Ou, plus compact

rails s -e production

Cela fonctionne pour les projets rails 3+.

348
répondu BandsOnABudget 2014-09-24 10:53:24

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)

61
répondu Dan McNevin 2017-05-23 12:26:33

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'
54
répondu Pete 2017-05-23 12:34:41

Changez la variable d'environnement RAILS_ENV en production.

19
répondu mipadi 2009-12-22 21:22:57

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

$ script/server -e production
18
répondu foz 2009-12-22 22:35:41
$> export RAILS_ENV=production
18
répondu Evolve 2013-04-10 11:16:37
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.

12
répondu prasann 2015-09-29 23:36:03
RAILS_ENV=production rails s

Ou

rails s -e production

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

6
répondu puneet18 2017-01-11 07:08:08

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

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

5
répondu alex1sz 2016-03-17 16:57:37

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
2
répondu RSK 2011-07-05 13:39:18

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

2
répondu Eugene Liskovets 2014-01-19 23:06:18

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
répondu user3786185 2014-08-13 04:50:18

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

1
répondu Pankaj Dhote 2018-04-30 11:18:28

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.

0
répondu Rakesh 2014-07-29 08:16:44