"Unvollständige Antwort von Antrag erhalten" von Nginx / Passagier

68

Ich habe versucht, meine Rails-App über Capistrano auf Nginx und Ubuntu bereitzustellen, wie im Tutorial auf der Seite https://gorails.com/deploy/ubuntu/14.04 . aber am ende bekomme ich eine fehlermeldung:

Incomplete response received from application

in meinem Browser. Dies ist wahrscheinlich ein Fehler des Passagiers, aber wie kann ich herausfinden, was zu tun ist?

saftig
quelle
Haben Sie versucht einzustellen passenger_buffer_response off;? stackoverflow.com/q/11738924/1454117
7
@ Avilyn Passagierautor hier. passenger_buffer_response_offhat nichts mit seinem Problem zu tun und wird nicht helfen. Vor langer Zeit gab es einen Fehler im Antwortpuffercode, aber dieser Fehler wurde lange behoben, sodass die Lösung in dem von Ihnen veröffentlichten StackOverflow-Beitrag nicht mehr gilt.
Hongli
@ Hongli Danke für die Klarstellung.
3
Hallo, ich habe es behoben. Das liegt daran, dass sie im Tutorial keine Umgebungsvariable für "<% = ENV [" SECRET_KEY_BASE "]%>" in der Secrets.yml hatten!
saftig

Antworten:

127

Ihre Rails_env-Produktion muss nicht eingerichtet werden, wahrscheinlich fehlt secret_key_base.

Öffnen Sie /etc/nginx/sites-available/defaultund ändern Sie rails_env in development:

rails_env production;
        to
rails_env development;

Wenn die App geladen wird, handelt es sich nicht um ein Passagierproblem.

Produktionslösung:

  1. Geben Sie Ihren App-Stamm ein
  2. Lauf: rake secret
  3. Kopieren Sie die Ausgabe
  4. gehe zu /yourapp/config/secrets.yml
  5. Stellen Sie die Produktion ein secret_key_base

Starten Sie die Passagier-App neu:

touch /yourapp/tmp/restart.txt
Yaniv Vova Alterman
quelle
4
Hallo, ich richte die <% = ENV ["SECRET_KEY_BASE"]%> in meinem vserver ~ / .bashrc ein: export SECRET_KEY_BASE=12345678910111212andmore
saftiger
7
versucht zu stimmen ... config / Secrets.yml sagtdo not keep production secrets in the repository, instead read values from the environment
Matthew Turner
3
Es hängt wirklich davon ab, wie schlau du bist :)
Yaniv Vova Alterman
9
Sie können mit Secrets.yml arbeiten und es zur .gitignore-Datei hinzufügen, damit es nie an Ihren Git-Anbieter weitergegeben wird, oder Sie können mit ENV-Variablen arbeiten. Ich arbeite mit beiden Techniken und alles in Ordnung. Wenn Ihr Server gehackt wird und der Hacker Zugriff auf Ihr System erhält, spielt es keine Rolle, wo Sie Ihre Schlüssel speichern :)
Yaniv Vova Alterman
Ich habe dies getan und komme immer noch nicht über den Fehler hinaus. Ich folge auch dem verknüpften Tutorial. Ich habe sogar überprüft, ob es als Entwicklung in Ordnung geladen wurde
Joe Sak
25

Dieser Fehler tritt auf, weil Sie die secret_key_base nicht festgelegt haben. Befolgen Sie diese Schritte, um das Problem zu beheben:

Wechseln Sie in Ihr Rails-App-Verzeichnis

cd /path/rails-app

Generieren Sie eine geheime Schlüsselbasis

rake secret RAILS_ENV=production

Umgebungsvariable festlegen

SECRET_KEY_BASE=<the-secret-key-base>

Starten Sie die Rails-App neu

touch /path/rails-app/tmp/restart.txt
Hoa Hoang
quelle
6

Ich hatte dieses Problem über das Wochenende (es stellte sich heraus, dass meine Versionen von Passagier und Rubin nicht kompatibel waren).

Es scheint jedoch niemand zu erwähnen: Der eigentliche Fehler wird möglicherweise in /var/log/apache2/errors.log angezeigt , nicht in einem benutzerdefinierten Protokoll.

Sobald Sie das wissen, wird Ihre Suche hoffentlich einfacher!


Update, da ich noch einmal darauf zurückgreifen musste - dies gilt auch für Nginx - /var/log/nginx/error.logist in diesem Fall dein Freund!

user208769
quelle
5

Für diejenigen, die Passagiere benutzen:

• Navigieren Sie zum Stammverzeichnis Ihres Projekts.

• Lauf bundle exec rake secret RAILS_ENV=production

• Kopieren Sie die Ausgabe und führen Sie sie aus sudo nano config/secrets.yml

productionErsetzen Sie unter den Wert von secret_key_basedurch das kürzlich kopierte Rake-Geheimnis.

• drücken CNTRL+X, dann drücken y, dann drücken enter.

• Führen passenger-config restart-appSie die App aus und wählen Sie sie aus, die Sie neu starten möchten.

https://www.phusionpassenger.com/library/admin/apache/restart_app.html

Ctpelnar1988
quelle
4

In meinem Fall lag dies daran, dass meinem Server zeitweise (während der PDF-Generierung) der Arbeitsspeicher ausgeht. Sobald das PDF generiert wurde, wurde etwas RAM wiederhergestellt und der Fehler würde verschwinden.

Ich hatte einen Ubuntu-Server mit 500 MB RAM.

Ich habe etwas Swap Space hinzugefügt und dieser Fehler ist verschwunden.

mridula
quelle
1

Dies bedeutet, dass Ihre Rails-App gepanzert wurde, bevor Sie tatsächlich zu Rails gelangen. Dies könnte eine Ausnahme bei Middleware sein, bei der der ENV-Schlüssel fehlt, etwas auf Betriebssystemebene.

Versuchen Sie zuerst, die App lokal zu booten und das zu tun, was Sie getan haben, um den Fehler in der Produktion zu erhalten. Wenn alles in Ordnung ist, überprüfen Sie alle Ihre Protokolle. Überprüfen Sie die Nginx-Protokolle, Ihre Passagierprotokolle und schließlich alle anderen betriebssystemspezifischen Protokolle, die sich auf das Booten und Ausführen Ihrer App beziehen.

jeremywoertink
quelle
0

Könnte sein, dass meine Antwort nicht zum Thema gehört, aber wenn mein Datenbankserver mysqlnicht läuft, habe ich auch diesen Fehler erhalten. Nur für den Fall, dass jemand den gleichen Fehler hat.

so start/restartkönnte Ihre Datenbank eine andere Antwort sein.

William Hu
quelle
0

Gibt es jemanden wie mich, der diesen Fehler nach dem Hochladen einer Datei erhalten hat?

Meine Lösung besteht darin, den Namen der Datei zu überprüfen, die möglicherweise Sonderzeichen wie `[(~ .

Entfernen Sie es einfach und laden Sie die Datei erneut hoch.

Viel Glück ~

fanjieqi
quelle
0

Ich habe dies nur auf meinem Testserver und nicht in der Produktion erhalten, da ich eine URL angefordert habe, die nicht vorhanden war, und ich denke, in der Testumgebung gibt Rails einen Fehler aus, anstatt eine 404-Antwort zurückzugeben.

Andrew Koster
quelle