Ändern Sie eine Rails-Anwendung in die Produktion


190

Wie kann ich meine Rails-Anwendung so ändern, dass sie im Produktionsmodus ausgeführt wird? Gibt es dafür eine Konfigurationsdatei, beispielsweise environment.rb?


2
Es scheint, dass die zweite Antwort viel mehr Stimmen hat. Würden Sie bereit sein, dies kurz zu überprüfen und die zweite Antwort zu akzeptieren, es sei denn, Sie haben ein Problem damit? Hilft nur zukünftigen Besuchern. Thx :)
Evolve

Antworten:


73

So richten Sie eine Rails 4-App im Produktionsmodus (Schritt für Schritt) mit Apache und Phusion Passenger ein und führen sie aus:

Normalerweise können Sie Ihr Rails-Projekt eingeben rails sund eine Entwicklungsversion Ihrer App unter http://something.com:3000 herunterladen . Der Produktionsmodus ist etwas schwieriger zu konfigurieren.

Ich habe eine Weile damit rumgespielt, also dachte ich mir, ich würde das für die Neulinge (wie mich selbst) aufschreiben. Es gibt ein paar kleine Änderungen, die im Internet verbreitet sind und die möglicherweise einfacher sind.

  1. In diesem Handbuch finden Sie Informationen zur Kernkonfiguration des Servers (CentOS 6, sollte jedoch für fast alle Linux-Versionen gelten): https://www.digitalocean.com/community/tutorials/how-to-setup-a-rails-4 -app-mit-Apache-und-Passagier-auf-Centos-6

  2. Stellen Sie unbedingt sicher, dass Sie die /etc/httpd/conf/httpd.confDatei nach dem Einrichten von Passenger so bearbeitet haben , dass sie Ihrer Verzeichnisstruktur entspricht. Sie möchten DocumentRoot auf Ihr Rails-Projekt / Ihren öffentlichen Ordner verweisen. Überall in der httpd.confDatei, die diese Art von Verzeichnis hat: /var/www/html/your_application/publicmuss aktualisiert werden, sonst wird alles sehr frustrierend. Ich kann das nicht genug betonen.

  3. Starten Sie den Server neu (oder zumindest Apache - service httpd restart)

  4. Geben Sie Ihren Rails-Projektordner ein /var/www/html/your_applicationund starten Sie die Migration mit rake db:migrate. Stellen Sie sicher, dass eine Datenbanktabelle vorhanden ist, auch wenn Sie später Tabellen hinzufügen möchten (dies ist auch Teil von Schritt 1).

  5. RAILS_ENV=production rake secret- Dadurch wird ein secret_key erstellt, den Sie hinzufügen können config/secrets.yml. Sie können dies kopieren / in config / secret.yml einfügen, um die Dinge zum Laufen zu bringen, obwohl ich empfehlen würde, dies nicht zu tun. Persönlich mache ich diesen Schritt, um sicherzustellen, dass alles andere funktioniert, ändere es dann zurück und beziehe es später.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompilewenn Sie statische Assets bereitstellen. Dadurch werden JS-, CSS- und Bilddateien in den /publicOrdner verschoben .

  8. RAILS_ENV=production rails s

An dieser Stelle Ihre App sollte verfügbar sein http://something.com/whateverstatt :3000. Wenn nicht, passenger-memory-statsund sehen Sie, ob es einen Eintrag wie908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Ich habe wahrscheinlich etwas Abscheuliches verpasst, aber das hat in der Vergangenheit für mich funktioniert.


2
Ich bin der Meinung, dass diese Antwort in die Stackoverflow-Dokumentation migriert werden sollte.
Whitecat

Ich würde hinzufügen, dass, wenn Sie keinen Webinhalt verwenden möchten, der wie Apache geliefert wird, Sie ein RAILS_SERVE_STATIC_FILES = 1 neben der RAILS_ENV = -Produktion hinzufügen könnten. Dies würde bedeuten, dass Rails jede Datei bedienen würden, daher wird dies für a nicht empfohlen realer Produktionszustand ...
3d0

351

Das wäre jetzt

rails server -e production

Oder kompakter

rails s -e production

Es funktioniert für Rails 3+ Projekte.


33
oder die Kurzversionrails s -e production
Pavel Nikolov

2
Was ist mit Cloud-Diensten wie Heroku? Wie läuft man server -e productionauf ihnen?
Grün

Cloud-Dienste verfügen normalerweise über Optionen zum Festlegen der Umgebung, sind jedoch productionimmer die Standardeinstellung.
James Billingham

2
echo "export RAILS_ENV=production" >> ~/.bash_profile
Meekohi

Sehr bevorzugte Antwort, diese sollte es in die StackOverflow-Dokumentation schaffen.
Dmanexe

61

Wenn Sie auf Passenger ausgeführt werden , wird standardmäßig in der Produktion in Ihrem Apache conf ausgeführt:

<VirtualHost *:80>
  ServerName application_name.rails.local
  DocumentRoot "/Users/rails/application_name/public"
  RailsEnv production ## This is the default
</VirtualHost>

Wenn Sie nur einen lokalen Server mit Mischling oder Webrick betreiben, können Sie Folgendes tun:

./script/server -e production

oder in Bash:

RAILS_ENV=production ./script/server

Das Überschreiben der RAILS_ENV-Konstante in enviornment.rb sollte wahrscheinlich Ihr letzter Ausweg sein, da es wahrscheinlich nicht gesetzt bleiben wird (siehe eine andere Antwort, die ich darauf gegeben habe).


54

Wenn der Vorschlag von mipadi nicht funktioniert, fügen Sie ihn zu config / environment.rb hinzu

# 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'

Was ist mit Cloud-Diensten wie Heroku? Kann ENV['RAILS_ENV'] ||= 'production'auf sie auch angewendet werden?
Grün

Ich habe diese Datei vor langer Zeit bearbeitet und vergessen .. danke für die Erinnerung .. viel Zeit gespart
Agnes

19

Ändern Sie die Umgebungsvariable RAILS_ENVin production.


3
Wo befindet sich die Umgebungsvariable?
BKSpurgeon

kann sich in ~/.bashrcoder ~/.bash_profileoder einfach befindenexport RAILS_ENV=production"
Shimaa Marzouk


18

Sie können die Umgebung auch an script / server übergeben:

$ script/server -e production

12
rails s -e production

Dadurch wird der Server mit RAILS_ENV= ausgeführt 'production'.

Abgesehen davon müssen Sie den Assets-Pfad festlegen production.rb

config.serve_static_assets = true

Ohne dies wird Ihr Vermögen nicht geladen.


Tut mir leid ... ich habe abgewählt, wenn ich abstimmen wollte. Leichte Bearbeitung vorgenommen, um Fehler und Upvote zu korrigieren.
Tomd

7
RAILS_ENV=production rails s

ODER

rails s -e production

Standardmäßig ist die Umgebung die Entwicklung.


5

Wie andere gepostet haben: rails server -e production

Oder mein persönlicher Favorit: RAILS_ENV=production rails s


2

In Schienen 3

Hinzufügen Rails.env = ActiveSupport::StringInquirer.new('production')in die application.rb und rails sfunktioniert genauso wierails 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

Es ist keine gute Möglichkeit, den Rails-Server in einer Produktionsumgebung durch "Rails-Server -e-Produktion" auszuführen, da Rails dann als Single-Thread-Anwendung ausgeführt wird und jeweils nur auf eine HTTP-Anforderung antworten kann.

Der beste Artikel über die Produktionsumgebung für Schienen ist Produktionsumgebungen - Schienen 3


3
Link rot ... verfügbar auf Wayback-Maschine: Link
Rosuav

1

für Standardserver: Schienen s-e Produktion

für Kostüm-Server-Port: Schienen s -p [Port] -e Produktion, z. Schienen s -p 3002 -e Produktion


1

Standardmäßig läuft der Server in der Entwicklungsumgebung: $ rails s

Wenn Sie in einer Produktionsumgebung arbeiten: $ rails s -e productionoder$ RAILS_ENV=production rails s


0

Bitte stellen Sie sicher, dass Sie dies unten in Ihrer Datei environment.rb getan haben.

ENV ['RAILS_ENV'] || = 'Produktion'

Wenn Ihre Anwendung in einer gemeinsam genutzten Hosting-Umgebung oder einem Phushion-Passagier ausgeführt wird, müssen Sie möglicherweise Änderungen in .httaccess (im öffentlichen Ordner) vornehmen und den Modus als Produktion festlegen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.