3 votos

No puedo acceder a PostgreSQL a veces después de la actualización de la aplicación del servidor

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 la aplicación del Servidor 3.2.1, podía acceder a PostgreSQL en mis Aplicaciones de Ruby on Rails y a través del Servicio Web. Después de instalar la aplicación del Servidor, 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 estuviera 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"?

Verifiqué 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 era el código que funcionaba antes de actualizar la Aplicación del Servidor. Verifiqué si el código en el plist se modificó después de la actualización de Mavericks y la Aplicación del Servidor.

    listen_addresses=127.0.0.1,::1
    unix_socket_permissions=0777

Cuando ejecuto el comando sudo serveradmin fullstatus postgres aquí está la salida.

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 ejecutaba 9.2.4, postgresIsResponding estaba configurado en sí y PGserverVersion era 90204. No estoy seguro si algo cambió entre la versión de PostgreSQL 9.2 y 9.3.

He realizado búsquedas en la web pero no puedo encontrar publicaciones recientes sobre esto utilizando las últimas versiones de Mavericks y la aplicación del Servidor.

Esto también está publicado en Server Fault.

Esto es lo que sucede cuando hago ps -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 ejecuto psql -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?

1voto

lkraider Puntos 111

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 postgresql se inicie.

Aquí están los pasos para resolverlo:

  1. Detener el servicio de postgres:

    sudo su
    serveradmin stop postgres
  2. Actualizar el campo de configuración:

    vim /Library/Server/PostgreSQL/Config/org.postgresql.postgres.plist

    sustituir unix_socket_directory con unix_socket_directories luego guardar y salir

  3. Mover la carpeta de datos de PostgreSQL:

    mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/DataOld
  4. Recrear la carpeta de datos estándar de PostgreSQL e inicializar 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
  5. Actualizar los datos en la base de datos en blanco con los 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
  6. Reiniciar el servicio de 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/

0voto

Secko Puntos 216

Su problema es que Apple parece haber cambiado los directorios de socket Unix y el puerto TCP utilizado.

Observe estas opciones pasadas al postmaster (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, está escuchando en un socket privado en una ubicación no predeterminada y no está escuchando en TCP/IP. También han cambiado los permisos de socket para negar 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 está descartando datos de usuario, como parece estar haciendo.

Sugiero instalar un servidor PostgreSQL para su uso en desarrollo. Las opciones populares son Homebrew y Postgres.app de Heroku. Vea 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á establecer host: /Library/Server/ProfileManager/Config/var/PostgreSQL en database.yml. Pero realmente, estoy bastante seguro de que Apple está tratando de hacer de eso una instancia privada de PostgreSQL solo para su uso...

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X