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 kann ich meine Rails-Anwendung so ändern, dass sie im Produktionsmodus ausgeführt wird? Gibt es dafür eine Konfigurationsdatei, beispielsweise environment.rb?
Antworten:
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 s
und 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.
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
Stellen Sie unbedingt sicher, dass Sie die /etc/httpd/conf/httpd.conf
Datei 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.conf
Datei, die diese Art von Verzeichnis hat: /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 ein /var/www/html/your_application
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 auch Teil von Schritt 1).
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.
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake assets:precompile
wenn Sie statische Assets bereitstellen. Dadurch werden JS-, CSS- und Bilddateien in den /public
Ordner verschoben .
RAILS_ENV=production rails s
An dieser Stelle Ihre App sollte verfügbar sein http://something.com/whatever
statt :3000
. Wenn nicht, passenger-memory-stats
und 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.
Das wäre jetzt
rails server -e production
Oder kompakter
rails s -e production
Es funktioniert für Rails 3+ Projekte.
rails s -e production
server -e production
auf ihnen?
production
immer die Standardeinstellung.
echo "export RAILS_ENV=production" >> ~/.bash_profile
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).
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'
ENV['RAILS_ENV'] ||= 'production'
auf sie auch angewendet werden?
Ändern Sie die Umgebungsvariable RAILS_ENV
in production
.
~/.bashrc
oder ~/.bash_profile
oder einfach befindenexport RAILS_ENV=production"
$> export RAILS_ENV=production
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.
In Schienen 3
Hinzufügen Rails.env = ActiveSupport::StringInquirer.new('production')
in die application.rb und rails s
funktioniert 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
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
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
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
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.