Estoy ejecutando la última versión de Mavericks 10.9.5 en mi Mac Mini Server. Antes de la actualización a la última versión de Server App 3.2.1, podía acceder a PostgreSQL en mis aplicaciones Ruby on Rails y a través del servicio web. Después de instalar la aplicación Server, implementé Phusion Passenger nuevamente en /Library/Server/Web/Config/apache2/httpd_server_app.conf. Luego abrí la aplicación del servidor y verifiqué que el servicio web estaba activado.
Mis aplicaciones de Ruby on Rails dejaron de funcionar indicando que tenía el siguiente error:
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"?
Revisé el archivo plist /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist. Las dos configuraciones que suelo modificar para deshacerme de este error son las siguientes. Este fue el código que funcionó antes de actualizar la aplicación del servidor. Verifiqué para asegurarme de que el código en el plist se modificó después de la actualización de Mavericks y la aplicación del servidor.
<string>listen_addresses=127.0.0.1,::1</string>
<string>unix_socket_permissions=0777</string>
Cuando ejecuto el comando sudo serveradmin fullstatus postgres aquí está el resultado.
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"
Cuando estaba ejecutando 9.2.4, postgresIsResponding estaba establecido en sí y PGserverVersion era 90204. No estoy seguro de si algo cambió entre PostgreSQL versión 9.2 y 9.3.
He realizado búsquedas en la web, pero no puedo encontrar ninguna publicación reciente sobre esto usando las últimas versiones de Mavericks y la aplicación Server.
Esto también se publica en Server Fault .
Esto es lo que sucede cuando lo hagops -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
Aquí está la salida cuando ejecutopsql -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?
Hay un error en el proceso de actualización, donde no migra las bases de datos anteriores debido a una opción de configuración actualizada que impide que se inicie postgresql.
Estos son los pasos para resolverlo:
Detenga el servicio de postgres:
sudo su
serveradmin stop postgres
Actualice el campo de configuración:
vim /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist
reemplazar unix_socket_directory
con unix_socket_directories
luego guardar y salir
Mueva la carpeta de datos de PostgreSQL:
mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/DataOld
Vuelva a crear la carpeta de datos estándar de PostgreSQL e inicialice una base de datos en blanco:
sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/initdb /Library/Server/PostgreSQL/Data -E utf8 --lc-collate=C --lc-ctype=C
Actualice los datos en la base de datos en blanco con datos de la carpeta DataOld:
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
Reinicie el servicio PostgreSQL:
launchctl load -w /Applications/Server.app/Contents/ServerRoot/System/Library/LaunchDaemons/org.postgresql.postgres.plist
serveradmin start postgres
fuente: http://www.macambulance.co.uk/os-x-server-3-2-1-update-breaks-postgresql/
Su problema es que Apple parece haber cambiado los directorios de socket de Unix y el puerto tcp utilizado.
Tenga en cuenta estas opciones pasadas al administrador de correos (que han renombrado postgres_real
):
-c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL
-c listen_addresses=
(Sí, eso es igual a nada)En otras palabras, escucha en un socket privado en una ubicación no predeterminada y no escucha en TCP/IP. También han cambiado los permisos de socket para denegar el acceso a otros usuarios:
-c unix_socket_group=_devicemgr
-c unix_socket_permissions=0770
Aplaudo a Apple por finalmente hacer esto, aunque parece que lo han hecho de la peor manera posible. Su instalación de PostgreSQL ha sido un gran dolor durante mucho tiempo porque tiende a entrar en conflicto con otras instalaciones. Reporté un error al respecto hace años. Sin embargo, es un problema importante si su proceso de actualización descarta los datos del usuario, como parece ser.
Sugiero instalar un servidor PostgreSQL para su uso de desarrollo. Las opciones populares son Homebrew y Postgres.app de Heroku. Consulte https://www.codefellows.org/blog/three-battle-tested-ways-to-install-postgresql .
Si desea intentar integrar su aplicación en la aplicación Servidor como lo hizo antes, deberá host: /Library/Server/ProfileManager/Config/var/PostgreSQL
configurar database.yml
. Pero en realidad, estoy bastante seguro de que Apple está tratando de hacer de eso una instancia privada de PostgreSQL solo para su uso...
psql 'host=/Library/Server/ProfileManager/Config/var/PostgreSQL dbname=mydatabase'
. Es posible que necesite sudo
que el usuario server.app
se ejecute como; No puedo decirle qué es eso, ya que su ps
listado anterior muestra solo ID de usuario numéricos, no nombres de usuario. Si puede conectarse, puede pg_dump -Fc
restaurar la base de datos en una nueva instancia de PostgreSQL. La única forma en que los datos se perderían realmente es si la actualización de server.app los eliminara/descartara porque no sabía que estaban allí; no sabemos que pasó.psql 'host=/Library/Server/ProfileManager/Config/var/PostgreSQL'
debería darte el mismo error. Si le dio exactamente el mismo error, entonces probablemente no entendió el comando del todo bien.
craig timbre
craig timbre
ps -ef | grep postgres
muestra? Si intenta conectarse a través de tcp/ip,psql -h localhost
¿qué sucede?Pamela Cook - LightBe Corp
Pamela Cook - LightBe Corp