Не удается установить pg gem: «mkmf.rb не может найти заголовочные файлы для ruby» (Mac OSX 10.6.5) - PullRequest
21 голосов
/ 09 декабря 2010

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

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

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

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

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

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


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

sudo env ARCHFLAGS="-arch i386" bundle install

и все пошло хорошо, пока не запустился Rails, сказав:

/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

Борьба за что угодно, Я пробовал 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 чем-то, что мне теперь нужно указать путь через некоторые флаги?Или я полностью на обед?

Ответы [ 10 ]

32 голосов
/ 03 ноября 2012

Я столкнулся с этой ошибкой, когда пытался установить rails by gem в CentOS 6.3.

Немного погуглив, я нашел быстрое решение: установка пакета ruby-devel.

sudo yum install ruby-devel

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

11 голосов
/ 09 декабря 2010

Как правило, комплекты драгоценных камней для 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

Iне помню, чтобы он был установлен на /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, поэтому приведенная выше информация должна помочь вам.

10 голосов
/ 13 января 2011

Это сработало для меня в 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 голосов
/ 20 декабря 2011

У меня есть 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

Удачи!

3 голосов
/ 16 декабря 2011

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

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). Не уверен, помогло это или нет, но, возможно, стоит попробовать, если вы по-прежнему сталкиваетесь с проблемами

3 голосов
/ 06 июля 2011

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

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

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

2 голосов
/ 09 декабря 2010

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

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

1 голос
/ 15 января 2013

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

sudo env ARCHFLAGS="-arch x86_64" gem install pg
0 голосов
/ 03 мая 2016

Установить 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
0 голосов
/ 08 февраля 2016

Все предложения здесь и в Интернете были для меня неполными, пока я не запустил в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...