Подтвердить что ты не робот

Не удалось установить pg gem, "mkmf.rb не может найти заголовочные файлы для ruby" (Mac OSX 10.6.5)

Я только что обновился до Rails 3 и немного разобрался с MacPorts, драгоценными камнями и базами данных. Я выбросил все драгоценные камни и свел их. Все кажется ОК, за исключением требования к pg gem.

После создания нового проекта Rails 3, подготовленного для PostgreSQL, сервер не запустится, жалуясь на отсутствующий жемчуг pg. Выполняя bundle install, он некоторое время отталкивается и, конечно же, терпит неудачу в pg gem.

Installing pg (0.10.0) with native extensions /Library/Ruby/Site/1.8/rubygems/installer.rb:483:in `build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb 
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.10.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.10.0/ext/gem_make.out
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `each'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:446:in `build_extensions'
    from /Library/Ruby/Site/1.8/rubygems/installer.rb:198:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/source.rb:95:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:55:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/spec_set.rb:12:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:44:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/installer.rb:8:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/cli.rb:225:in `install'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `send'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/task.rb:22:in `run'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor.rb:246:in `dispatch'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/vendor/thor/base.rb:389:in `start'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/bin/bundle:13
    from /usr/bin/bundle:19:in `load'
    from /usr/bin/bundle:19

Самое распространенное предложение, которое я нашел на форумах и блогах, - это (re) установить инструменты разработчика XCode. Они уже были там, но я все равно их переустановил, не имея лучшего результата, чем выше.

which ruby говорит /usr/bin/ruby, а ruby -v говорит ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0], если там есть какая-либо подсказка.

Указатели приветствуются. Любая недостающая информация, которая поможет понять это, я с радостью и оперативно предоставляю!


Я загрузил XCode, так как версия DVD, как говорят, сломана, и все пошло лучше на некоторое время. bundle install вместо этого начал говорить об "archflags", поэтому я сделал:

sudo env ARCHFLAGS="-arch i386" bundle install

и казалось, что все идет хорошо, пока не запустит Rails barfed, сказав:

/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle, 9): no suitable image found.  Did find: (LoadError)
    /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle: mach-o, but wrong architecture - /Library/Ruby/Gems/1.8/gems/pg-0.10.0/lib/pg_ext.bundle

Grappling для чего-нибудь, я попробовал bundle install с флагов флагов, установленными на -arch x86_64, но все получилось не так:

*** Your PostgreSQL installation doesn't seem to have an architecture in common with the running ruby interpreter ([] vs. ["x86_64"])
I'll continue anyway, but if it fails, try setting ARCHFLAGS.
[...]
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

Является ли libpq тем, что мне теперь нужно, чтобы указать путь к некоторым флагам? Или я полностью на обед?

4b9b3361

Ответ 1

Как правило, пакеты gem для Postgres хотят знать, где скрывается pg_config, чтобы они могли спросить об установке Postgres.

Используйте locate pg_config, чтобы узнать, знает ли ваш Mac, где он скрывается.

Я установил копию Postgres, используя mappstack, поэтому мой Mac говорит там копию:

/Applications/mappstack-1.2-3/postgresql/bin/pg_config

а другой:

/Library/PostgreSQL/9.0/bin/pg_config

Я не помню, чтобы установить его в /Library/PostgreSQL/9.0, поэтому он мог быть предварительно установлен Snow Leopard, или я сделал это, когда под влиянием слишком большой работы, возможно, с помощью установщика Postgres из EnterpriseDB.

После того, как вы нашли местоположение pg_config, попробуйте добавить этот каталог в начало вашего PATH, а затем повторно запустите установку gem. Или используйте:

export SQL_PATH=/Library/PostgreSQL/9.0
gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config

и попробуйте установить. Если любая из этих работ будет выполнена. В противном случае...

Следующее, что может понадобиться установщикам, - это доступ к заголовкам Postgres, поэтому вы смотрите в родительском каталоге каталогов bin и посмотрите, можете ли вы найти каталог include.

После этого загляните в каталог для каталога lib. После того, как вы узнаете эти местоположения, у вас должно быть все, что вам нужно, чтобы установить переменные среды, чтобы завершить установку. Вам нужно будет прочитать файл README или INSTALL установщика и посмотреть, что нужно настроить. Вы будете настраивать:

export include_dir=$SQL_PATH/include/
export     lib_dir=$SQL_PATH/lib/
gem install pg -- --with-pgsql-include-dir=$include_dir --with-pgsql-lib-dir=$lib_dir

Надеюсь, это все поможет. У меня есть Rails 3, и мои Postgres работают нормально, используя mappstack Postgres и версии EnterpriseDB, поэтому приведенная выше информация должна быть там.

Ответ 2

Я столкнулся с этой ошибкой, когда попытался установить рельсы с помощью gem на CentOS 6.3.

После небольшого поискового запроса я нашел быстрое исправление: установка пакета ruby-devel.

sudo yum install ruby-devel

После этого все работало нормально.

Ответ 3

Это работало для меня на OS X 10.6.6, с PostgreSQL 9.0.1, установленным из исходного кода:

export PATH=/usr/local/psql/bin:$PATH
export ARCHFLAGS='-arch x86_64'
gem install pg

Вам, вероятно, придется изменить этот PATH, чтобы он соответствовал месту установки postgres.

Ответ 4

У меня установлен postgres 1.9.0 через macports. OS X 10.5 PPC

Это сработало для меня:

gem install pg -- --with-pg-lib=/opt/local/lib/postgresql90 --with-pg-include=/opt/local/include/postgresql90

Удачи!

Ответ 5

Как правило, пакеты gem для Postgres хотят знать, где скрывается pg_config.,.

Правильно - это может быть трюк. Если вы только что установили PostgreSQL и добавили его в свой путь и "установили пакет" в старой оболочке, он не сможет найти pg_config. Если это случай, просто получите новую оболочку и повторите попытку. В противном случае следуйте приведенным выше инструкциям, чтобы найти его и получить его, увиденный связующим.

Установка macports для postgresql83 отлично работает и отлично работает с рельсами прямо из коробки - это еще один способ сделать это.

Ответ 6

Я просто потратил много времени, чтобы заставить это работать сегодня вечером. Я видел аналогичную ошибку:

Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***

Я пробовал разные варианты установки gem:

gem install pg -- --with-pg-config=/Library/PostgreSQL/9.1/bin/ --with-pg-lib=/Library/PostgreSQL/9.1/lib/ --with-pg-include=/Library/PostgreSQL/9.1/include/

Но, наконец, что сработало для меня:

gem install pg -- --with-pg-dir=/Library/PostgreSQL/9.1/

Кроме того, перед этим я обновил rvm (rvm get head) и переустановил ruby ​​(rvm --force install 1.9.2). Не уверен, помогло это или нет, но, возможно, стоит попробовать, если вы все еще сталкиваетесь с проблемами.

Ответ 7

Возможно, вы захотите попробовать homebrew для установки postgres (brew install postgres) и Ruby Version Manager для установки и обслуживания рубиновых и рубиновых драгоценных камней.

Он оставит ваши версии по умолчанию (установленные с OSX) нетронутыми и даст вам большую гибкость. Например, у вас могут быть разные приложения с рельсами, использующие рельсы 2 или 3 с рубинами 1.8.7 и 1.9.2, все установленные в одной системе без проблем.

Ответ 8

Это сработало для меня:

sudo env ARCHFLAGS="-arch x86_64" gem install pg

Ответ 9

Все предложения здесь и вокруг Интернета были неполными для меня, пока я не запустил следующее в CentOS 6.6:

wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.3/x86_64/updates/security/kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm && sudo yum install kernel-devel-2.6.32-504.1.3.el6.x86_64.rpm
wget -c ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/6.6/x86_64/updates/security/kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm && sudo yum install kernel-headers-2.6.32-504.30.3.el6.x86_64.rpm
sudo yum groupinstall "Development Tools" "Development Libraries" 
sudo yum -y install gcc gcc-c++ git ruby ruby-devel rubygems libvirt-devel mysql-devel postgresql-devel openssl-devel libxml2-devel sqlite-devel libxslt-devel zlib-devel readline-devel tar make automake autoconf curl-devel openssl-devel zlib-devel httpd-devel apr-devel apr-util-devel sqlite-devel ruby193-ruby-doc ruby193-ruby-devel ruby193-build
curl -L get.rvm.io | bash -s stable && source $HOME/.rvm/scripts/rvm && rvm requirements

Ответ 10

Установить Postgres.app:

http://postgresapp.com/

Проверьте, какая версия была установлена:

$ ls /Library/PostgreSQL/
# 9.4

Экспортируйте SQL_PATH:

export SQL_PATH=/Library/PostgreSQL/9.4

Установить pg:

gem install pg -- --with-pg-config=$SQL_PATH/bin/pg_config