Wir haben eine Ruby v.2.0.0-p247
für Rails v4.0.1
-Anwendung mit pg gem v0.17.0
.
Die Anwendung läuft reibungslos unter Mac OS X Mavericks v10.9
mit PostgreSQL Server v9.2.4
installiert unter Verwendung von HomeBrew
, aber es gibt die folgende Ausnahme unter Ubuntu v13.04
mit PostgreSQL Server 9.1
:
PG::UnableToSend: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
Die Ausnahme tritt nach Transaktionsabfragen (Formularübergabe) auf.
Ich habe Folgendes mit database.yml
versucht:
reconnect: true
port: 5432
socket: /var/run/postgresq/SOCKET_FILE
Und versuchte folgendes mit PostgreSQL-Konfiguration unter Ubuntu:
DEBUG
und Suchen nach möglichen Fehlern auf PostgreSQL Server. Auch versucht:
Was könnte möglicherweise falsch sein?
UPDATES:
12/03/2013: Einige haben vorgeschlagen, die Firewall-Einstellungen zu überprüfen. ufw status
hat angegeben, dass ufw
deaktiviert ist.
12/08/2013: Nach dem Ausprobieren mit einer Vanilla Rails App und vielen Fehlern mit der aktuellen Anwendung, stammt das Problem von rails4/activerecord-session_store
gem. Zeile 47 in lib/active_record/session_store/session.rb
ist der Täter.
Dies geschieht im Wesentlichen, wenn Sie eine alte Version von launchy verwenden und gemäß diesem Anfrage auf Launchys Git Repo-Zitat @infertux
Im seltenen Fall, dass
exec
den Befehl nicht ausführen kann - normalerweise, wenn die Datei nicht geöffnet werden kann, indemErrno::ENOENT
ausgelöst wird - würde Launchy eine Ausnahme auslösen, aber keine Ausgabe anzeigen
Sie können Ihre Gemfile.lock
überprüfen, um zu sehen, ob Sie eine Version von launchy
unter 2.4.1 verwenden, und ich bezweifle, dass Sie letter_opener
Gem in Ihrer Entwicklungsumgebung verwenden, die von launchy
abhängt. Wenn also letter_opener
auf 1.2.0 aktualisiert wird, wird launchy
auf eine Version über 2.4.0 aktualisiert, meistens 2.4.2, bei der dieses Problem behoben ist
Alle Kredite gehen an @infertux
Es würde wirklich helfen, wenn Sie Ihre Datei database.yml
bereitstellen würdenDie Standardverbindungsmethode ist ein Unix-Domain-Socket, der nicht mit einem TCP / IP-Socket zu verwechseln ist. Die Unix-Domain-Socket-Verbindungsmethode wird standardmäßig verwendet.
Sie sollten überprüfen, ob der Unix-Benutzer, unter dem Sie rails ausführen möchten, über ausreichende Berechtigungen für den Zugriff auf den Domänen-Socket verfügt (normalerweise in /var/run/postgresql/.s.PGSQL.5432
)
Geben Sie Folgendes als Ihr rails-Benutzer ein:
%Vor%Wenn Sie einen Datenbankverbindungsfehler bekommen, ist es wahrscheinlich ein Berechtigungsproblem, wenn postgres tatsächlich ausgeführt wird.
Sie können Ihre /etc/postgresql.conf
-Datei überprüfen und postgres die Gruppe und die Berechtigungen für den Socket beim Start konfigurieren:
Eine weitere Option besteht darin, den Benutzer zu der Gruppe hinzuzufügen, die Schreibzugriff auf den Socket hat, oder allen Benutzern auf dem Computer Zugriff mit den oben genannten 0777-Berechtigungen zu gewähren. Vielleicht möchten Sie eine postres_users
-Gruppe für diesen Zweck erstellen, wenn die Standard-Ubuntu-Gruppen nicht genügend Granularität für Ihre Bedürfnisse bieten.
Es sieht für mich so aus, als gäbe es Verwirrung über die Verbindungsmethode. PostgreSQL unterstützt die beiden Methoden:
Diese sind völlig, ganz anders. : -)
In Ihrer Frage zeigen Sie eine socket
Einstellung, aber erwähnen Sie TCP. Ich schlage vor, dass ich mich auf jeden dieser beiden Wege konzentriere, mich isoliert zu verbinden und zu sehen, was Ergebnisse hervorbringt. Das heißt, erstellen Sie zwei Versionszweige pg-socket
und pg-tcpip
, nur um die Dinge zu verdeutlichen. Bereinigen Sie dann Ihre Konfigurationsdatei und versuchen Sie, eine Verbindung über beide Methoden herzustellen.
Oft ist eine Socket-Verbindung einfacher, weil Sie nur den Pfadnamen der Socket-Datei kennen müssen. Es sind keine Fireware-Einstellungen erforderlich (da kein TCP / IP-Netzwerk beteiligt ist).
Aktualisieren Sie Ihre Frage, nachdem Sie dies getan haben und sagen Sie uns, wie jede der beiden Methoden für Sie getan hat.
Tags und Links ruby ruby-on-rails activerecord postgresql ubuntu