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