Ответ 1
Решение: переустановил PostgreSQL с помощью Homebrew.
Я пытаюсь установить PostgreSQL для Rails в Mac OS X 10.6. Сначала я попробовал установку MacPorts, но это не помогло, поэтому я установил установку DMG с одним щелчком мыши. Это, похоже, сработало.
Я подозреваю, что мне нужно установить пакеты разработки PostgreSQL, но я не знаю, как это сделать на OS X.
Вот что я получаю, когда пытаюсь сделать sudo gem install pg
:
$ sudo gem install pg
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /Library/PostgreSQL/8.3/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** 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=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
--with-pg
--without-pg
--with-pg-dir
--without-pg-dir
--with-pg-include
--without-pg-include=${pg-dir}/include
--with-pg-lib
--without-pg-lib=${pg-dir}/lib
--with-pg-config
--without-pg-config
--with-pg_config
--without-pg_config
--with-pqlib
--without-pqlib
--with-libpqlib
--without-libpqlib
--with-ms/libpqlib
--without-ms/libpqlib
Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/pg-0.11.0 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/pg-0.11.0/ext/gem_make.out
Решение: переустановил PostgreSQL с помощью Homebrew.
$ sudo su
$ env ARCHFLAGS="-arch x86_64" gem install pg
Building native extensions. This could take a while...
Successfully installed pg-0.11.0
1 gem installed
Installing ri documentation for pg-0.11.0...
Installing RDoc documentation for pg-0.11.0...
РАБОТАЛ!
Я попробовал самый высокий рейтинг здесь:
env ARCHFLAGS="-arch x86_64" gem install pg
Но когда я снова попробовал запустить пакет, у него была такая же ошибка. Затем я попробовал установить весь комплект с ARCHFLAGS следующим образом:
ARCHFLAGS="-arch x86_64" bundle install
Работал для меня! Обязательно замените x86_64 на i386 в зависимости от архитектуры.
У меня была эта проблема при использовании EnterpiseDB.dmg. Если это то же самое, что вы использовали, я получил его для работы, указав правильную архитектуру:
sudo env ARCHFLAGS="-arch i386" gem install pg
В Интернете есть несколько учебных пособий, в которых говорится, что они указывают другую архитектуру (например, "-arch x86_64" для людей, которые использовали MacPorts), но она не работала для меня, потому что я использовал установку одного файла.
Возможно, вы можете попробовать следующее:
ARCHFLAGS="-arch i386 -arch x86_64" gem install pg
Чтобы узнать архитектуру вашей библиотеки, вы можете использовать
file /usr/local/lib/libpq.dylib
который дал только 1 архитектуру в моем случае (установлен через homebrew):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
Если вы используете Yosemite:
brew install postgres
Тогда:
ARCHFLAGS="-arch x86_64" gem install pg
И (необязательно), наконец, если вы хотите запустить autovacuum...
postgres -D /usr/local/var/postgres
Подчините gem
, префикс соответствующих переменных окружения. Если вы устанавливали с MacPorts, вы должны пройти следующую процедуру:
% /opt/local/lib/postgresql91/bin/pg_config
BINDIR = /opt/local/lib/postgresql91/bin
DOCDIR = /opt/local/share/doc/postgresql
HTMLDIR = /opt/local/share/doc/postgresql
INCLUDEDIR = /opt/local/include/postgresql91
PKGINCLUDEDIR = /opt/local/include/postgresql91
INCLUDEDIR-SERVER = /opt/local/include/postgresql91/server
LIBDIR = /opt/local/lib/postgresql91
PKGLIBDIR = /opt/local/lib/postgresql91
LOCALEDIR = /opt/local/share/locale
MANDIR = /opt/local/share/man
SHAREDIR = /opt/local/share/postgresql91
SYSCONFDIR = /opt/local/etc/postgresql91
PGXS = /opt/local/lib/postgresql91/pgxs/src/makefiles/pgxs.mk
CONFIGURE = '--prefix=/opt/local' '--sysconfdir=/opt/local/etc/postgresql91' '--bindir=/opt/local/lib/postgresql91/bin' '--libdir=/opt/local/lib/postgresql91' '--includedir=/opt/local/include/postgresql91' '--datadir=/opt/local/share/postgresql91' '--mandir=/opt/local/share/man' '--with-includes=/opt/local/include' '--with-libraries=/opt/local/lib' '--with-openssl' '--with-bonjour' '--with-readline' '--with-zlib' '--with-libxml' '--with-libxslt' '--enable-thread-safety' '--enable-integer-datetimes' '--with-ossp-uuid' 'CC=/usr/bin/gcc-4.2' 'CFLAGS=-pipe -O2 -arch x86_64' 'LDFLAGS=-L/opt/local/lib -arch x86_64' 'CPPFLAGS=-I/opt/local/include -I/opt/local/include/ossp'
CC = /usr/bin/gcc-4.2
CPPFLAGS = -I/opt/local/include -I/opt/local/include/ossp -I/opt/local/include/libxml2 -I/opt/local/include
CFLAGS = -pipe -O2 -arch x86_64 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wformat-security -fno-strict-aliasing -fwrapv
CFLAGS_SL =
LDFLAGS = -L/opt/local/lib -arch x86_64 -L/opt/local/lib -L/opt/local/lib -Wl,-dead_strip_dylibs
LDFLAGS_EX =
LDFLAGS_SL =
LIBS = -lpgport -lxslt -lxml2 -lssl -lcrypto -lz -lreadline -lm
VERSION = PostgreSQL 9.1beta1
Оттуда вытащите LIBDIR
, INCLUDEDIR
, CPPFLAGS
, LIBS
и LDFLAGS
(тем не менее, я думаю, что вы будете работать LIBDIR
). Затем вы запустите:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
Это должно сделать это за вас. Дайте мне знать, если это не так.
Проблема у нас была довольно странная.
ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
но когда мы установили пакет, на самом деле, пакет не был установлен для версии ruby, которая была установлена rbenv, поэтому, когда мы набрали установку пакета, она использовала комплектщик системы.
Итак, перед запуском установки пакета убедитесь, что вы установили пакет, выполнив
gem install bundler
Я не думаю, что вам нужны файлы разработки postgres, все, что вам нужно, должно быть включено в ваш установщик. Скорее всего, что путь, к которому они установлены, не находится в вашем пути к среде, и поэтому камень не может найти их, когда он пытается скомпилировать pg.
Вам не нужно запускать gem install pg
как root, на самом деле, если вы это сделаете, ваш PATH (root PATH, если вы запустите w/sudo) не будет содержать необходимую информацию.
Для меня обычно работает следующее:
# Might be different depending on where your installer installed postgres 8.3
export PATH=$PATH:/Library/PostgreSQL/8.3/include/
export ARCHFLAGS='-arch x86_64'
gem install pg
Это то, что окончательно сделало это для меня (сочетание нескольких решений, предоставленных перед другими сообщениями):
$sudo env ARCHFLAGS = "- arch x86_64" gem install pg - with-pg-include =/Library/PostgreSQL/9.6/include/
Ответ ARCHFLAGS
, который другие предложили, не будет работать, если вы каким-то образом закончите с 64-разрядной версией postgres (который будет установлен homebrew) и 32-разрядной версией ruby. По какой-то причине rbenv
настаивает на создании Ruby 1.9.2-p290 как 32-битный для меня, что делает невозможным связывание с 64-разрядными postgres.
Проверьте архитектуру вашего рубинового двоичного файла с помощью
file `which ruby`
или если используется rbenv
file `rbenv which ruby`
И сравните с вашими postgres:
file `which postgres`
Если есть неправильное совпадение, вам нужно будет переустановить postgres или ruby. С rbenv я решил это, просто переключившись на другую версию: 1.9.3-p194
вместо 1.9.2-p290
.
Вот как я сделал это для работы с Маверикс. Примечание. Я уже установил postgresql 9.3 из homebrew.
Обновить Xcode до 5.0 из App Store
Установите средства разработки командной строки
xcode-select --install
Согласиться на лицензию Xcode
sudo xcodebuild -license
Установить драгоценный камень
ARCHFLAGS = "- arch x86_64" gem install pg
Итак, в основном я это сделал; -)
brew install postgres
Вероятно, я немного опаздываю на вечеринку, но в моем случае я использовал rbenv и обновлялся до Ruby 2.2.3. Мне пришлось установить Bundler, чтобы заставить мой работать, у меня была старая версия системы.
gem install bundler