Ich verwende die neueste Version von Mavericks 10.9.5 auf meinem Mac Mini Server. Vor dem Upgrade auf die neueste Version der Server App 3.2.1 konnte ich in meinen Ruby on Rails-Anwendungen und über den Webdienst auf PostgreSQL zugreifen. Nachdem ich die Server App installiert habe, habe ich Phusion Passenger wieder in /Library/Server/Web/Config/apache2/httpd_server_app.conf implementiert. Ich habe dann die Server-App geöffnet und überprüft, ob der Webdienst aktiviert ist.
Meine Ruby on Rails-Anwendungen funktionierten nicht mehr und gaben an, dass ich den folgenden Fehler hatte:
PG::ConnectionBad (could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Ich habe die Plist-Datei /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist überprüft. Die beiden Einstellungen, die ich normalerweise ändere, um diesen Fehler zu beseitigen, sind die folgenden. Dies war der Code, der funktionierte, bevor ich die Server-App aktualisierte. Ich habe überprüft, ob der Code in der Plist nach dem Update von Mavericks und der Server-App geändert wurde.
<string>listen_addresses=127.0.0.1,::1</string>
<string>unix_socket_permissions=0777</string>
Wenn ich den Befehl sudo serveradmin fullstatus postgres ausführe, ist hier die Ausgabe.
postgres:dataDirHasBeenInitialized = yes
postgres:PG_VERSION = "9.3.4"
postgres:dataDir = "/Library/Server/PostgreSQL/Data"
postgres:postgresIsResponding = no
postgres:dataDirIsDirectory = yes
postgres:PGserverVersion = 0
postgres:dataDirExists = yes
postgres:setStateVersion = 1
postgres:state = "RUNNING"
Als ich 9.2.4 ausgeführt habe, war postgresIsResponding auf yes gesetzt und PGserverVersion war 90204. Ich bin mir nicht sicher, ob sich zwischen PostgreSQL Version 9.2 und 9.3 etwas geändert hat.
Ich habe Websuchen durchgeführt, kann aber mit den neuesten Versionen von Mavericks und der Server-App keine aktuellen Beiträge dazu finden.
Dies wird auch in Server Fault gepostet .
Hier ist, was passiert, wenn ich das tueps -ef | grep postgres
220 124 1 0 Mon07AM ?? 2:30.39 /usr/bin/python /Applications/Server.app/Contents/ServerRoot/usr/bin/xpostgres -a /Library/Server/ProfileManager/Config/PostgreSQL_config.plist
220 361 124 0 Mon07AM ?? 0:08.36 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/ProfileManager/Config/ServiceData/Data/PostgreSQL -c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL -c logging_collector=on -c log_rotation_size=10MB -c log_connections=on -c log_lock_waits=on -c log_statement=ddl -c log_line_prefix=%t -c listen_addresses= -c log_directory=/Library/Logs/ProfileManager -c log_filename=PostgreSQL-%F.log -c log_min_messages=WARNING -c log_min_error_statement=WARNING -c unix_socket_group=_devicemgr -c unix_socket_permissions=0770 -c max_connections=200
220 388 361 0 Mon07AM ?? 0:00.01 postgres: logger process
220 401 361 0 Mon07AM ?? 0:00.91 postgres: checkpointer process
220 402 361 0 Mon07AM ?? 0:04.07 postgres: writer process
220 403 361 0 Mon07AM ?? 0:03.88 postgres: wal writer process
220 404 361 0 Mon07AM ?? 0:11.83 postgres: autovacuum launcher process
220 405 361 0 Mon07AM ?? 0:01.08 postgres: archiver process
220 406 361 0 Mon07AM ?? 0:33.03 postgres: stats collector process
220 407 361 0 Mon07AM ?? 0:05.01 postgres: wal sender process _devicemgr [local] streaming 0/802DC88
220 484 361 0 Mon07AM ?? 0:00.73 postgres: _devicemgr devicemgr_v2m0 [local] idle
220 495 361 0 Mon07AM ?? 0:14.02 postgres: _devicemgr devicemgr_v2m0 [local] idle
220 535 361 0 Mon07AM ?? 0:00.00 postgres: _devicemgr devicemgr_v2m0 [local] idle
501 75088 74999 0 7:14PM ttys000 0:00.00 grep postgres
Hier ist die Ausgabe, wenn ich sie ausführepsql -h localhost
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?
Es gibt einen Fehler im Aktualisierungsprozess, bei dem die vorherigen Datenbanken aufgrund einer aktualisierten Konfigurationsoption, die den Start von postgresql verhindert, nicht migriert werden.
Hier sind die Schritte, um es zu lösen:
Beenden Sie den Postgres-Dienst:
sudo su
serveradmin stop postgres
Aktualisieren Sie das Konfigurationsfeld:
vim /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist
ersetzen unix_socket_directory
durch unix_socket_directories
dann speichern & beenden
Verschieben Sie den PostgreSQL-Datenordner:
mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/DataOld
Erstellen Sie den standardmäßigen PostgreSQL-Datenordner neu und initialisieren Sie eine leere Datenbank:
sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/initdb /Library/Server/PostgreSQL/Data -E utf8 --lc-collate=C --lc-ctype=C
Aktualisieren Sie die Daten in der leeren Datenbank mit Daten aus dem DataOld-Ordner:
sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/pg_upgrade -b /Applications/Server.app/Contents/ServerRoot/usr/libexec/postgresql9.2 -B /Applications/Server.app/Contents/ServerRoot/usr/bin -d /Library/Server/PostgreSQL/DataOld -D /Library/Server/PostgreSQL/Data
Starten Sie den PostgreSQL-Dienst neu:
launchctl load -w /Applications/Server.app/Contents/ServerRoot/System/Library/LaunchDaemons/org.postgresql.postgres.plist
serveradmin start postgres
Quelle: http://www.macambulance.co.uk/os-x-server-3-2-1-update-breaks-postgresql/
Ihr Problem ist, dass Apple anscheinend die Unix-Socket-Verzeichnisse und den verwendeten TCP-Port geändert hat.
Beachten Sie diese Optionen, die an den Postmaster übergeben wurden (den sie umbenannt haben postgres_real
):
-c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL
-c listen_addresses=
(Ja, das ist nichts)Mit anderen Worten, es lauscht auf einem privaten Socket an einem nicht standardmäßigen Ort und nicht auf TCP/IP. Sie haben auch die Socket-Berechtigungen geändert, um anderen Benutzern den Zugriff zu verweigern:
-c unix_socket_group=_devicemgr
-c unix_socket_permissions=0770
Ich begrüße Apple dafür, dass es das endlich getan hat – obwohl sie es anscheinend auf die schlechteste Art und Weise getan haben, die sie tun konnten. Ihre PostgreSQL-Installation war lange Zeit ein großes Problem, da sie dazu neigte, mit anderen Installationen in Konflikt zu geraten. Ich habe vor Jahren einen Fehler darüber gemeldet. Es ist jedoch ein großes Problem, wenn ihr Upgrade-Prozess Benutzerdaten verwirft, wie es den Anschein hat.
Ich schlage vor, einen PostgreSQL-Server für Ihre Entwicklungszwecke zu installieren. Beliebte Optionen sind Homebrew und Heroku's Postgres.app . Siehe https://www.codefellows.org/blog/three-battle-tested-ways-to-install-postgresql .
Wenn Sie versuchen möchten, Ihre App wie zuvor in die Server-App zu integrieren, müssen host: /Library/Server/ProfileManager/Config/var/PostgreSQL
Sie database.yml
. Aber wirklich, ich bin mir ziemlich sicher, dass Apple versucht, daraus eine private PostgreSQL-Instanz nur für ihre Verwendung zu machen ...
psql 'host=/Library/Server/ProfileManager/Config/var/PostgreSQL dbname=mydatabase'
. Möglicherweise müssen Sie sudo
den Benutzer server.app
ausführen als; Ich kann Ihnen nicht sagen, was das ist, da Ihre ps
obige Auflistung nur numerische Benutzer-IDs zeigt, keine Benutzernamen. Wenn Sie eine Verbindung herstellen können, können Sie pg_dump -Fc
die Datenbank in einer neuen PostgreSQL-Instanz wiederherstellen. Die einzige Möglichkeit, dass die Daten tatsächlich verloren gehen, besteht darin, dass das server.app-Upgrade sie löscht/verwirft, weil sie nicht wusste, dass sie vorhanden sind; wir wissen nicht, dass das passiert ist.psql 'host=/Library/Server/ProfileManager/Config/var/PostgreSQL'
sollte es nicht den gleichen Fehler geben. Wenn es Ihnen genau den gleichen Fehler gab, dann haben Sie den Befehl wahrscheinlich nicht ganz richtig verstanden.
Craig Ringer
Craig Ringer
ps -ef | grep postgres
zeigt? Was passiert , wenn Sie versuchen, eine Verbindung über TCP/IP herzustellenpsql -h localhost
?Pamela Cook - LightBe Corp
Pamela Cook - LightBe Corp