Non riesco ad accedere a PostgreSQL a volte dopo l'aggiornamento dell'app server

3

Ho installato l'ultima versione di Mavericks 10.9.5 sul mio Mac Mini Server. Prima dell'aggiornamento alla versione più recente dell'app Server 3.2.1 sono riuscito ad accedere a PostgreSQL nelle mie applicazioni Ruby on Rails e tramite il servizio Web. Dopo aver installato l'App Server, ho implementato nuovamente Phusion Passenger in /Library/Server/Web/Config/apache2/httpd_server_app.conf. Ho quindi aperto l'app server e verificato che il servizio Web è stato attivato.

Le mie applicazioni Ruby on Rails hanno smesso di funzionare affermando che avevo il seguente errore:

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"?

Ho controllato il file plist / Library / Server / PostgreSQL / Config / org.postgresql.postgres.plist. Le due impostazioni che di solito modifico per eliminare questo errore sono le seguenti. Questo era il codice che funzionava prima di aggiornare l'app del server. Ho verificato se il codice nel plist è stato modificato dopo l'aggiornamento di Mavericks e dell'app Server.

    <string>listen_addresses=127.0.0.1,::1</string>
    <string>unix_socket_permissions=0777</string>

Quando eseguo il comando sudo serveradmin fullstatus postgres, ecco l'output.

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"

Quando eseguivo 9.2.4 postgresIsResponding era impostato su yes e PGserverVersion era 90204. Non sono sicuro se qualcosa è cambiato tra PostgreSQL versione 9.2 e 9.3.

Ho effettuato ricerche web ma non riesco a trovare post recenti su questo utilizzando le ultime versioni di Mavericks e l'app Server.

Questo è anche pubblicato in Errore server .

Ecco cosa succede quando faccio 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

Ecco l'output quando eseguo 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?
    
posta Pamela Cook - LightBe Corp 08.10.2014 - 22:15
fonte

2 risposte

1

C'è un bug nel processo di aggiornamento, in cui non viene eseguita la migrazione dei database precedenti a causa di un'opzione di configurazione aggiornata che impedisce l'avvio di postgresql.

Ecco i passaggi per risolverlo:

  1. Interrompi il servizio postgres:

    sudo su
    serveradmin stop postgres
    
  2. Aggiorna il campo di configurazione:

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

    sostituisci unix_socket_directory con unix_socket_directories quindi salva & uscita

  3. Sposta la cartella dei dati di PostgreSQL:

    mv /Library/Server/PostgreSQL/Data /Library/Server/PostgreSQL/DataOld
    
  4. Ricrea la cartella dati PostgreSQL standard e inizializza un database vuoto:

    sudo -u _postgres /Applications/Server.app/Contents/ServerRoot/usr/bin/initdb /Library/Server/PostgreSQL/Data -E utf8 --lc-collate=C --lc-ctype=C
    
  5. Aggiorna i dati nel database vuoto con i dati dalla cartella 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. Riavvia il servizio PostgreSQL:

    launchctl load -w /Applications/Server.app/Contents/ServerRoot/System/Library/LaunchDaemons/org.postgresql.postgres.plist
    serveradmin start postgres
    

fonte: link

    
risposta data 13.10.2014 - 20:34
fonte
0

Il tuo problema è che Apple sembra aver cambiato le directory socket unix e la porta TCP utilizzata.

Nota queste opzioni passate al postmaster (che hanno rinominato postgres_real ):

  • -c unix_socket_directories=/Library/Server/ProfileManager/Config/var/PostgreSQL
  • -c listen_addresses= (Sì, è uguale a niente)

In altre parole, è in ascolto su un socket privato in una posizione non predefinita e non su TCP / IP. Hanno anche modificato le autorizzazioni del socket per negare l'accesso ad altri utenti:

  • -c unix_socket_group=_devicemgr
  • -c unix_socket_permissions=0770

Mi congratulo con Apple per averlo fatto, anche se sembra che lo abbiano fatto nel peggiore dei modi in cui potevano farlo. La loro installazione di PostgreSQL è stata un grave problema per molto tempo perché tende a entrare in conflitto con altre installazioni. Ho segnalato un bug su di esso anni fa. È un grosso problema se il loro processo di aggiornamento sta scartando i dati dell'utente, come sembra, però.

Suggerisco di installare un server PostgreSQL per l'utilizzo in sviluppo. Le scelte più comuni sono Homebrew e Heroku's Postgres.app. Vedi link .

Se vuoi provare ad integrare la tua app nell'app Server come hai fatto prima, dovrai impostare host: /Library/Server/ProfileManager/Config/var/PostgreSQL in database.yml . Ma in realtà, sono abbastanza sicuro che Apple stia cercando di rendere un'istanza PostgreSQL privata solo per il loro uso ...

    
risposta data 09.10.2014 - 02:48
fonte

Leggi altre domande sui tag