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?
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.
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
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.
Starten Sie den Server neu (oder zumindest Apache - service httpd restart
)
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).
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.
Rails_ENV=production rake db:migrate
Rails_ENV=production rake assets:precompile
, Wenn Sie statische Assets bereitstellen. Dadurch werden js-, css- und image-Dateien in den Ordner /public
Verschoben.
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.
Das wäre jetzt
Rails server -e production
Oder kompakter
Rails s -e production
Es funktioniert für Rails 3+ Projekte.
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)
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'
Ändern Sie die Umgebungsvariable Rails_ENV
bis production
.
$> export Rails_ENV=production
Sie können die Umgebung auch an script/server übergeben:
$ script/server -e production
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.
Rails_ENV=production Rails s
_Rails s -e production
__
OR
By default environment is developement.
Wie andere geschrieben haben: Rails server -e production
Oder mein persönlicher Favorit: Rails_ENV=production
Rails s
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
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
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
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
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.