Korzystam z aplikacji railsowej w fazie rozwoju z postgresql 9.3. Kiedy próbowałem dzisiaj uruchomić serwer pasażerski, otrzymałem:
PG::ConnectionBad - could not connect to server: Connection refused
Is the server running on host "localhost" (217.74.65.145) and accepting
TCP/IP connections on port 5432?
Nic wielkiego, nie myślałem, że to się zdarzyło wcześniej. Ponowne uruchomienie postgres zawsze rozwiązało problem. Więc pobiegłem sudo service postgresql restart
i dostałem:
* Restarting PostgreSQL 9.3 database server
* The PostgreSQL server failed to start. Please check the log output:
2014-06-11 10:32:41 CEST LOG: could not bind IPv4 socket: Cannot assign requested address
2014-06-11 10:32:41 CEST HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2014-06-11 10:32:41 CEST WARNING: could not create listen socket for "localhost"
2014-06-11 10:32:41 CEST FATAL: could not create any TCP/IP sockets
...fail!
Moje postgresql.conf
punkty do wartości domyślnych: localhost
i portu 5432
. Próbowałem zmienić port, ale komunikat o błędzie jest taki sam (oprócz zmiany portu).
Oba ps aux | grep postgresql
i ps aux | grep postmaster
nic nie zwracają.
EDYTOWAĆ:
W postgresql.conf
zmieniłem listen_addresses
na 127.0.0.1
zamiast localhost
i udało się, serwer zrestartował się. Musiałem również edytować konfigurację bazy danych moich aplikacji i wskazywać 127.0.0.1
zamiast localhost
. Jednak pytanie brzmi teraz: dlaczego localhost jest uważany za, 217.74.65.145
a nie 127.0.0.1
?
To jest moje /etc/hosts
:
127.0.0.1 local
127.0.1.1 jacek-X501A1
127.0.0.1 something.name.non.example.com
127.0.0.1 company.something.name.non.example.com
źródło
sudo netstat -anlp | grep 5432
?example.com
jako nazwy domeny.Odpowiedzi:
Twoje
/etc/hosts
jest zepsute. Pierwszy wiersz powinien brzmiećźródło
/etc/hosts
różne inne czynniki mogą powodować różne odpowiedzi DNS, gdy wyszukiwanie DNSlocalhost
jest rzeczywiście działać. Zobacz stackoverflow.com/a/47824848/5419599 .dns files
zamiastfiles dns
w nsswitch.conf i masz serwer nazw, który rozwiązuje localhost, możesz mieć kłopoty. Ale to wydaje mi się mało prawdopodobne ...nslookup
do weryfikacji. Alenslookup
polecenie w Linuksie nie jest używane,nsswitch.conf
a/etc/hosts
przede wszystkim. A jeśli chodzidns files
o konfigurację, to brzmi jak proszenie mnie o kłopoty.Rozumiem, że odpowiedź na to pytanie, ale dla tych, którzy nadal mają błąd, przyczyną może być to, że już rozpoczął się jakiś inny proces. Na przykład
Homebrew
podczas uruchamiania systemu.W takim przypadku spróbuj go zatrzymać:
brew services stop postgres
źródło