Ändern Sie eine Rails-Anwendung in Produktion

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

Wie man eine Rails 4 App im Produktionsmodus (Schritt-für-Schritt) mit Apache und Phusion Passenger einrichtet und ausführt:

Normalerweise könnten Sie Ihr Rails-Projekt, rails s , eingeben und eine Entwicklungsversion Ihrer App unter http://something.com:3000 abrufen . Der Produktionsmodus ist etwas komplizierter zu konfigurieren.

Ich habe schon eine Weile damit herumgetüftelt, also dachte ich mir, ich schreibe das für die Neulinge (wie mich) auf. Es gibt ein paar kleine Verbesserungen, die im Internet verbreitet sind und sich vorstellen, dass dies einfacher sein könnte.

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

  2. /etc/httpd/conf/httpd.conf Sie absolut sicher, dass Sie nach der Einrichtung von Passenger die Datei /etc/httpd/conf/httpd.conf entsprechend Ihrer Verzeichnisstruktur bearbeitet haben. Sie möchten DocumentRoot auf Ihr Rails-Projekt / Ihren öffentlichen Ordner httpd.conf Überall in der httpd.conf Datei, die diese Art von httpd.conf enthält: /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 (oder Apache zumindest – service httpd restart )

  4. Geben Sie Ihren Rails-Projektordner /var/www/html/your_application und starten Sie die Migration mit rake db:migrate /var/www/html/your_application . Stellen Sie sicher, dass eine databasetabelle 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 – dies wird einen secret_key erzeugen, den du zu config/secrets.yml hinzufügen config/secrets.yml . Sie können dies in config / secrets.yml kopieren / einfügen, um die Dinge laufen zu lassen, obwohl ich Ihnen rate, dies nicht zu tun. Persönlich mache ich diesen Schritt, um sicherzustellen, dass alles andere funktioniert, dann ändern Sie es zurück und beziehen Sie es später.

  6. RAILS_ENV=production rake db:migrate

  7. RAILS_ENV=production rake assets:precompile wenn Sie statische RAILS_ENV=production rake assets:precompile . Dadurch werden js, css, Bilddateien in den Ordner /public verschoben.

  8. RAILS_ENV=production rails s

An dieser Stelle sollte Ihre App unter http://something.com/whatever statt :3000 verfügbar sein. Wenn nicht, passenger-memory-stats und sehen, ob dort ein Eintrag wie 908 469.7 MB 90.9 MB Passenger RackApp: /var/www/html/projectname

Ich habe wahrscheinlich etwas abscheuliches vermisst, 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 auf Passenger laufen, wird standardmäßig in der Produktion in Ihrem apache conf ausgeführt:

  ServerName application_name.rails.local DocumentRoot "/Users/rails/application_name/public" RailsEnv production ## This is the default  

Wenn Sie nur einen lokalen Server mit Mongrel oder Webrick ausführen, können Sie Folgendes tun:

 ./script/server -e production 

oder in bash:

 RAILS_ENV=production ./script/server 

die RAILS_ENV-Konstante in der enviornment.rb zu überschreiben, sollte wahrscheinlich der letzte Ausweg sein, da sie wahrscheinlich nicht gesetzt bleibt (siehe eine andere Antwort, die ich dazu gab).

Wenn der 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 in production .

Sie können die Umgebung auch an Skript / Server übergeben:

 $ script/server -e production 
 $> export RAILS_ENV=production 
 rails s -e production 

Dadurch wird der Server mit RAILS_ENV = 'production' .

Außerdem müssen Sie in production.rb den Anlagenpfad setzen

 config.serve_static_assets = true 

Ohne dies werden Ihre Assets nicht geladen.

 RAILS_ENV=production rails s 

ODER

 rails s -e production 

Standardmäßig ist die Umgebung eine Entwicklung.

Wie andere geschrieben haben: rails server -e production

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

In Rails 3

Hinzufügen von Rails.env = ActiveSupport::StringInquirer.new('production') in die application.rb und rails s funktionieren 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, den Rails-Server in der Produktionsumgebung mit “rails server -e production” auszuführen, da rails dann als single-threaded-Anwendung ausgeführt wird und nur auf eine HTTP-Anfrage gleichzeitig antworten kann.

Der beste Artikel über Produktionsumgebung für Rails ist Production Environments – Rails 3

für den Standardserver: rails s -e production

für costum server port: rails s -p [port] -e produktion, zb. Rails s -p 3002 -e Produktion

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

ENV [‘RAILS_ENV’] || = ‘Produktion’

Wenn Ihre Anwendung in einer Shared 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.

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

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