wake-up-neo.com

Ändern Sie eine Rails -Anwendung in die Produktion

Wie kann ich meine Rails -Anwendung so ändern, dass sie im Produktionsmodus ausgeführt wird? Gibt es eine Konfigurationsdatei, zum Beispiel environment.rb, um das zu tun?

188
Adler Medrado

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, Rails s) Eingeben und eine Entwicklungsversion Ihrer App unter http://something.com herunterladen : 3000 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 Verbesserungen, die im Internet verbreitet sind und gedacht haben, dass dies einfacher sein könnte.

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

  2. Stellen Sie absolut sicher, dass Sie nach dem Einrichten von Passenger die Datei /etc/httpd/conf/httpd.conf Bearbeitet haben, um Ihre Verzeichnisstruktur widerzuspiegeln. Sie möchten DocumentRoot auf Ihren Rails project/public folder irgendwo in der httpd.conf - Datei verweisen hat diese Art von Dir: /var/www/html/your_application/public muss 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 /var/www/html/your_application Ein und 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 der Fall) ist auch Teil von Schritt 1).

  5. Rails_ENV=production rake secret - Dies erstellt einen geheimen Schlüssel, den Sie zu config/secrets.yml Hinzufügen können. Sie können kopieren/fügen dies in config/secrets.yml ein, um die Dinge zum Laufen zu bringen, obwohl ich empfehlen würde, dies nicht zu tun. Ich persönlich mache diesen Schritt, um sicherzustellen, dass alles andere funktioniert, und ändere ihn dann zurück und gebe ihn später als Quelle aus.

  6. Rails_ENV=production rake db:migrate

  7. Rails_ENV=production rake assets:precompile, Wenn Sie statische Assets bereitstellen. Dadurch werden js-, css- und image-Dateien in den Ordner /public Verschoben.

  8. Rails_ENV=production Rails s

Zu diesem Zeitpunkt sollte Ihre App unter http://something.com/whatever Anstelle von :3000 Verfügbar sein. Wenn nicht, passenger-memory-stats Und prüfen Sie, ob es einen Eintrag wie 908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname Gibt.

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

69
etusm

Das wäre jetzt

Rails server -e production

Oder kompakter

Rails s -e production

Es funktioniert für Rails 3+ Projekte.

350
BandsOnABudget

Wenn Sie mit Passenger arbeiten, wird standardmäßig in Ihrer Apache-Konfiguration in der Produktion 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, haben Sie folgende Möglichkeiten:

./script/server -e production

oder in bash:

Rails_ENV=production ./script/server

das Überschreiben der Rails_ENV-Konstante in der enviornment.rb sollte wahrscheinlich Ihre letzte Möglichkeit sein, da sie wahrscheinlich nicht gesetzt bleiben wird (siehe eine andere Antwort Ich habe darauf gegeben)

61
Dan McNevin

Wenn Vorschlag von mipadi nicht funktioniert, fügen Sie dies 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'
54
Pete

Ändern Sie die Umgebungsvariable Rails_ENV bis production.

19
mipadi
$> export Rails_ENV=production
19
Evolve

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

$ script/server -e production
18
foz
Rails s -e production

Dies startet den Server mit Rails_ENV = 'production'.

Ansonsten muss der Assets-Pfad in production.rb

config.serve_static_assets = true

Ohne dies wird Ihr Vermögen nicht geladen.

12
prasann
Rails_ENV=production Rails s
_Rails s -e production
__

OR

By default environment is developement.

6
puneet18

Wie andere geschrieben haben: Rails server -e production

Oder mein persönlicher Favorit: Rails_ENV=productionRails s

5
alex1sz

In Rails

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

Es ist keine gute Möglichkeit, Rails server in der Produktionsumgebung mit "Rails server -e production" auszuführen, da dann Rails als Singlethread-Anwendung ausgeführt wird und kann jeweils nur auf eine HTTP-Anforderung antworten.

Der beste Artikel zur Produktionsumgebung für Rails ist Production Environments - Rails

2

für Standardserver: Rails s -e production

für benutzerdefinierten Server-Port: Rails s -p [Port] -e Produktion, z. B. Rails s -p 3002 -e Produktion

1
user3786185

Standardmäßig wird der Server in der Entwicklungsumgebung ausgeführt: $ Rails s

Wenn Sie mit einer Produktionsumgebung arbeiten: $ Rails s -e production oder $ Rails_ENV=production Rails s

1
Pankaj Dhote

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

ENV ['Rails_ENV'] || = 'Produktion'

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

0
Rakesh