Проблемы с установкой pg gem с помощью rvm, postgres 9.0, ruby ​​1.9.2-p136 на 64-битном Snow Leopard - PullRequest
5 голосов
/ 30 июня 2011

Я хочу создать приложение Rails 3 для Heroku.Они используют Postgres в качестве своей базы данных, поэтому я установил Postgres 9.0 через MacPorts.Теперь мне нужен гем postgres, и единодушно, что по соображениям производительности вам нужен гем pg.Однако я полностью сбит с толку ошибками, которые я получаю, когда пытаюсь установить pg через gem install под rvm.

Я очень четко указал, где должны быть найдены все каталоги postgres, но все ещеневозможно завершить установку:

$ env ARCHFLAGS='-arch x86_64' gem install pg -- \
   --with-pg-config=/opt/local/var/db/postgresql90/defaultdb/postgresql.conf \
   --with-pg-include=/opt/local/include/postgresql90/ \
   --with-pg-lib=/opt/local/lib/postgresql90/

Using config values from /opt/local/var/db/postgresql90/defaultdb/postgresql.conf
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/Users/guy/.rvm/ruby-1.9.2-p136/bin/ruby
    --with-pg
    --without-pg
    --with-pg-dir
    --without-pg-dir
    --with-pg-include=${pg-dir}/include
    --with-pg-lib=${pg-dir}/lib
    --with-pg-config
extconf.rb:24:in ``': Exec format error - /opt/local/var/db/postgresql90/defaultdb/postgresql.conf --includedir (Errno::ENOEXEC)
    from extconf.rb:24:in `<main>'

У кого-нибудь есть идеи?Я сбит с толку.Guy

Ответы [ 2 ]

6 голосов
/ 30 июня 2011

Я думаю, что ваша проблема именно здесь:

--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/postgresql.conf

Переключатель --with-pg-config, вероятно, хочет знать, где находится сценарий pg_config, а не postgresql.conf.У вас должен быть сценарий pg_config где-то под /opt/local/bin (вероятно), он должен создавать большую кучу таких вещей:

BINDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/bin
DOCDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/share/doc
HTMLDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/share/doc
INCLUDEDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/include
PKGINCLUDEDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/include
INCLUDEDIR-SERVER = /Users/mu/Developer/Cellar/postgresql/9.0.1/include/server
LIBDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/lib
PKGLIBDIR = /Users/mu/Developer/Cellar/postgresql/9.0.1/lib
...

при запуске.Сценарий pg_config сообщает вам (или тому, кто спрашивает), где находятся различные заголовочные файлы и библиотеки и какие флаги компилятора нужны.

Сообщение об ошибке «Ошибка формата Exec» - это раздача.Похоже, вы пытаетесь выполнить что-то, что ОС не знает, как выполнить, и я не ожидаю, что OSX узнает, как выполнить какой-то произвольный файл конфигурации.

2 голосов
/ 30 июня 2011

Самое простое исправление, которое я использую: добавьте / opt / local / lib / postgresql90 / bin / к вашей переменной $ PATH.

Скажем, вы используете оболочку bash, затем в ~ / .bashrc

PATH= / opt / local / lib / postgresql90 / bin: $ PATH

Теперь простая строка в Gemfile:

gem 'pg'

будет просто работать.

...