Ruby 1.9.3-p392 и PostgreSQL
Я создал новое приложение с рельсами rails new app_name -d postgresql
и я не могу использовать любую команду рельсы (rails s
, rails g controller ControllerName
и тд и тп). Я получаю эти ошибки:
/Users/sebkomianos/.rvm/gems/ruby-1.9.3-p392/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1216:in ``initialize': could not connect to server: No such file or directory (PG::Error)
Это мое database.yml
файл:
development:
adapter: postgresql
encoding: unicode
database: project_development
pool: 5
username: project
password:`
test:
adapter: postgresql
encoding: unicode
database: project_test
pool: 5
username: project
password:`
production:
adapter: postgresql
encoding: unicode
database: project_production
pool: 5
username: project
password:`
У меня точно такая же проблема, когда я создаю приложение rails со стандартным rails new app_name
команда и вручную изменить Gemfile
использовать pg gem
,
Пару недель назад я был на ruby2, и созданное мною приложение работало нормально. Версия Rails - 3.2.13.
Есть идеи?
ОБНОВЛЕНИЕ: забавно (по крайней мере для меня) то, что у меня есть приложение, развернутое на heroku, и оно прекрасно работает там. Теперь, если я бегу rake db:create
кажется, что все работает хорошо и локально (не нужно ничего менять в database.yml
файл). Может быть, это делает мою проблему более ясной?
1 ответ
Вам может понадобиться указать socket
аргумент в вашем config/database.yml
указать полный путь к сокету Postgres UNIX-типа, если это то, что вы используете. Это может быть в нестандартном месте.
Я обычно избегаю проверок config/database.yml
в исходный репозиторий проекта, поскольку это вызывает конфликты с другими людьми, работающими с той же кодовой базой, которые имеют разные конфигурации. Включить database.yml.example
в качестве полезного шаблона, чтобы начать вместо этого.
Добавление host: localhost
обычно вместо этого используется принудительное подключение TCP/IP, но это может не сработать. Иногда host: 127.0.0.1
работает вместо, как localhost
может интерпретироваться как "использовать сокет UNIX по умолчанию".