2013-05-25 9 views
1

Я изучаю рельсы и следую за учебником по Ruby on Rails.Rails: rspec не работает после перехода на postgreSQL

У него был дополнительный вызов и научил меня использовать postgreSQL вместо стандартного SQlite3.

Однако, поскольку я изменил к PostGreSQL моих Rspec тестов не что сделали работу с SQLite ..

Я бег: bundle exec rspec spec/requests/static_pages_spec.rb и возвращает:

Failure/Error: Unable to find matching line from backtrace 
    PGError: 
     could not connect to server: Permission denied 
     Is the server running locally and accepting 
     connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

Это то, что у меня есть в моей базе данных.yml для тестирования:

test: 
    adapter: postgresql #sqlite3 
    database: sample_app #db/test.sqlite3 
    pool: 5 

Любые мысли? Благодаря!!!

+0

Проверьте, что в файле database.yml есть все обновленные кредиты для вашего postgresql db. Или вставьте свой database.yml здесь. – Trip

+0

Возможно, вы должны уточнить ... 1. *, что вы сделали, чтобы «изменить на postgreSQL» и 2. работает ли приложение правильно * вне * тестовой среды с вашими изменениями, и это просто не работает при выполнении тестов? Или приложение не работает в браузере? –

+0

@Trip Я просто добавил тестовый код в свою базу данных.yml за вашу помощь! – Reuben

ответ

1

Вы действительно не задаете свое имя пользователя и пароль, или просто не указали его ради безопасности? Казалось бы, ваши учетные данные отсутствуют или неверны. Убедитесь, что вы указали правильное имя пользователя и пароль. Вы также можете указать порт.

Например, попробуйте следующее:

adapter: postgresql 
database: sample_app 
hostname: 127.0.0.1 
port: 5432 
username: USERNAME 
password: PASSWORD 

Вам нужно будет заменить USERNAME и PASSWORD с Teh значениями, которые вы использовали при настройке сервера Postgres.

+0

Я следил за этим, чтобы настроить postgreSQL, ничего не сказал, что мне нужно имя пользователя и пароль. 'http: // postgresapp.com/documentation' Как добавить его? То же самое с портом, довольно уверен, что он использует по умолчанию 5432 – Reuben

+0

@Reuben у вас есть pg работает локально? – Trip

+0

Да, приложение работает правильно в chrome, кажется, что только мои тесты не работают. – Reuben

0

Это интересная проблема. Ошибка вы получаете:

PGError: 
     could not connect to server: Permission denied 
     Is the server running locally and accepting 
     connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 

... указывает на то, что libpq, используемый в жемчужину Pg в Ruby, не может открыть сокет Unix в /var/pgsql_socket/.s.PGSQL.5432 из-за проблемы разрешений файловой системы. Скорее всего у вашего пользователя нет достаточных разрешений на /var/pgsql_socket/. Если Mac OS X позволяет самим сокетам иметь разрешения, то это может быть разрешение на /var/pgsql_socket/.s.PGSQL.5432; Я использую Linux, где файлы сокетов не могут иметь разрешения и не знают, отличается ли OS X.

Try:

ls -ld /var/pgsql_socket/.s.PGSQL.5432 
ls -ld /var/pgsql_socket 
ls -ld /var 

Вы можете обычно работать вокруг проблем Mac с UNIX сокеты и Pg, используя соединение TCP/IP. Просто укажите host как localhost в вашей базе данных yml; это приведет к созданию сетевого соединения TCP/IP, а не к соединению сокетов unix.

Возможно также, что вы используете libpq, который не соответствует серверу PostgreSQL, на котором вы работаете. Это распространено в OS X, потому что Apple установила по умолчанию устаревшую версию PostgreSQL по некоторым версиям системы. Если это так, то есть много информации о проблеме в Stack Overflow (поиск тегов «osx», «rails», «postgresql»), поэтому я не буду повторять его здесь. Использование TCP/IP является обходным путем, так как указывает host как unix_socket_path работающего сервера PostgreSQL.

Возможно, это произойдет с connection refused, если PostgreSQL фактически не работает.

+0

Это то, что я получил: https://gist.github.com/reubenpressman/e491f2d2025be5ba3679 – Reuben

+0

@Reuben OK, поэтому сокет PostgreSQL доступен только для пользователя '_postgres'. Это говорит мне, что вы используете неправильный libpq, поскольку Postgres.app работает как ваша учетная запись пользователя не как пользователь '_postgres'. Вы используете другой PostgreSQL в Rails, вероятно, тот, который «изначально» установлен в Mac OS X. Либо перестроить жемчужину Pg против libpq в postgres.app, либо запустить 'SHOW unix_socket_directory' в' psql' против Postgres .app PostgreSQL и установите ваш «хост» в результирующий каталог. Быстрый поиск (у меня нет OS X для тестирования), указывает на '/ tmp' для Postgres.app. –

Смежные вопросы