Това наистина изглежда като грешка в разрешенията на файлове. Unix домейн сокети са файлове и имат потребителски разрешения, както всеки друг. Изглежда, че потребителят на OSX, който се опитва да осъществи достъп до базата данни, няма разрешения за файл за достъп до файла на сокета. За да потвърдя това, направих някои тестове на Ubuntu и psql, за да се опитам да генерирам същата грешка (включена по-долу).
Трябва да проверите разрешенията за сокет файла и неговите директории /var
и /var/pgsql_socket
. Вашето приложение Rails (потребител на OSX) трябва да има разрешения за изпълнение (x) в тези директории (за предпочитане да предостави на всички разрешения) и сокетът трябва да има пълни разрешения (wrx). Можете да използвате ls -lAd <file>
за да ги проверите и ако някой от тях е символна връзка, трябва да проверите файла или директорията, към която сочи връзката.
Можете да промените разрешенията за директорията за себе си, но сокетът се конфигурира от postgres в postgresql.conf
. Това може да бъде намерено в същата директория като pg_hba.conf
(Трябва да разберете коя). След като зададете разрешенията, ще трябва да рестартирате postgresql.
# postgresql.conf should contain...
unix_socket_directory = '/var/run/postgresql' # dont worry if yours is different
#unix_socket_group = '' # default is fine here
#unix_socket_permissions = 0777 # check this one and uncomment if necessary.
РЕДАКТИРАНЕ:
Направих бързо търсене в Google, което може да искате да разгледате, за да видите дали е свързано. Това може да доведе до всеки опит за find
вашият конфигурационен файл е неуспешен.
http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
Съобщения за грешки:
Потребител не е намерен в pg_hba.conf
psql: FATAL: no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off
Удостоверяване на паролата с неуспешна потребителска парола:
psql: FATAL: password authentication failed for user "couling"
Липсващ unix сокет файл:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Unix сокетът съществува, но сървърът не го слуша.
psql: could not connect to server: Connection refused
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Лоши разрешения за файл на unix сокет файл :
psql: could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?