Je ne trouve pas la bibliothèque client PostgreSQL (libpq)
j'essaie d'installer PostgreSQL pour Rails sur Mac OS X 10.6. J'ai d'abord essayé L'installation de MacPorts, mais ça ne s'est pas bien passé, alors j'ai fait L'installation de DMG en un clic. Qui semblait fonctionner.
je soupçonne que j'ai besoin d'installer les paquets de développement PostgreSQL mais je n'ai aucune idée de comment faire cela sur OS X.
Voici ce que j'obtiens quand j'essaie de faire 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
16 réponses
$ 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...
a fonctionné!
j'ai essayé la réponse la mieux notée ici:
env ARCHFLAGS="-arch x86_64" gem install pg
mais quand j'ai essayé d'exécuter bundle install à nouveau, il avait la même erreur. Puis j'ai essayé toute l'installation de bundle avec ARCHFLAGS comme cela:
ARCHFLAGS="-arch x86_64" bundle install
a marché pour moi! Assurez-vous de remplacer x86_64 par i386 en fonction de l'architecture que vous avez.
j'avais juste ce problème en utilisant le EnterpiseDB .DMG. Si c'est la même chose que vous avez utilisé, Je l'ai fait fonctionner en spécifiant la bonne architecture:
sudo env ARCHFLAGS="-arch i386" gem install pg
il y a quelques tutoriels sur le web qui ont dit de spécifier une architecture différente (comme"- arch x86_64 " pour les personnes qui ont utilisé MacPorts) mais ça ne marchait pas pour moi parce que j'ai utilisé l'installation d'un seul fichier.
si vous utilisez Yosemite:
brew install postgres
puis:
ARCHFLAGS="-arch x86_64" gem install pg
et (optionnel) enfin, si vous voulez lancer autovacuum...
postgres -D /usr/local/var/postgres
Peut-être que vous pouvez essayer celui-ci:
ARCHFLAGS="-arch i386 -arch x86_64" gem install pg
pour connaître l'architecture de votre bibliothèque, vous pouvez utiliser
file /usr/local/lib/libpq.dylib
qui a donné seulement 1 architecture dans mon cas (installé via homebrew):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
simuler gem
en préfixant les variables d'environnement appropriées. Si vous installez à partir de MacPorts, vous devriez pouvoir suivre la procédure suivante:
% /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
de là, sortir le LIBDIR
, INCLUDEDIR
, CPPFLAGS
, LIBS
et LDFLAGS
(celui qui je pense va vous faire courir est LIBDIR
, cependant). Alors, vous courriez:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
Qui devrait le faire pour vous. Permettez-moi de je sais si c'est pas le cas.
Le problème que nous avions était assez bizarre.
ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
mais quand nous avons fait une installation package en fait, bundler n'a pas été installé pour la version de ruby qui a été installé par rbenv, donc, quand nous avons tapé package install, il a utilisé le bundler du système.
donc avant d'exécuter bundle install, assurez-vous que vous avez installé bundler en exécutant
gem install bundler
Je ne pense pas que vous ayez besoin des fichiers de développement postgres, tout ce dont vous avez besoin aurait dû être inclus avec votre installateur. Il est plus probable que le chemin sur lequel ils sont installés ne soit pas dans votre chemin d'environnement et donc gem ne peut pas les trouver quand il essaie de compiler pg.
vous ne devriez pas avoir à exécuter gem install pg
comme root, en fait si vous le faites, il est probable que votre chemin (le chemin de root si vous exécutez w/ sudo) ne contiendra pas les informations nécessaires.
le
# 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
C'est ce qui l'a finalement fait pour moi (combinaison de plusieurs solutions fournies avant avec d'autres messages):
$ sudo env ARCHFLAGS=" - arch x86_64 "gem install pg -- with-pg-include= / Library/PostgreSQL / 9.6 / include /
la réponse ARCHFLAGS
que d'autres ont proposée ne fonctionnera pas si vous vous retrouvez avec une version 64 bits de postgres (que homebrew installera) et une version 32 bits de ruby. Pour quelque raison rbenv
insiste sur la construction de ruby 1.9.2-p290 en tant que 32-bit pour moi, ce qui rend impossible de relier contre 64-bit postgres.
Vérifiez l'architecture de votre ruby binaire avec
file `which ruby`
ou si vous utilisez rbenv
file `rbenv which ruby`
et comparez avec vos postgres:
file `which postgres`
S'il y a une correspondance erronée, vous devrez réinstaller postgres ou ruby. Avec rbenv j'ai résolu cela juste en passant à une version différente: 1.9.3-p194
au lieu de 1.9.2-p290
.
voilà comment j'ai fait pour travailler sur Mavericks. Note: j'avais déjà installé postgresql 9.3 de homebrew.
-
mise à Jour de Xcode de 5.0 à partir de l'App Store
-
Installer en ligne de commande outils de développement
xcode-select --install
-
accord de licence Xcode
sudo xcodebuild-licence
-
Installer le gem
ARCHFLAGS=" - arch x86_64 "gem install pg
Donc, fondamentalement, je l'ai fait ;-)
brew install postgres
je suis probablement un peu en retard à la fête ici, mais dans mon cas j'utilisais rbenv et la mise à niveau à Ruby 2.2.3. J'ai dû installer Bundler pour que le mien fonctionne, j'avais une ancienne version système.
gem install bundler
comme mentionné ci-dessus cela a à voir avec le fait d'avoir deux arcs en rubis sur rbenv /usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]
ce que j'ai dû faire était tout simplement installer pg
gem forcing x86_64
arc à utiliser avec cette commande:
sudo env ARCHFLAGS="-arch x86_64" gem install pg
N'oubliez pas d'avoir votre bash_profile
up to date
ajouter le chemin de vos postgres, dans ce cas im en utilisant l'application Postgres ( OSX
) au lieu de brew
( https://postgresapp.com / ) par défaut c'est l'emplacement:
export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH
recharger bash avec
sudo vi ~/.bash_profile
après avoir fait cela, j'ai finalement pu installer avec succès pg gem
Espérons que cette aide!
sur Mac vous pouvez essayer ceci (fonctionne pour moi): gem install pg -- with-pg-include= / Library/PostgreSQL / 9.5 / include Extraction: pg-1.0.0.gem (100)%) Construire des extensions natives avec: 'with-pg-include= / Library / PostgreSQL / 9.5 / include' Cela pourrait prendre un certain temps... Installation réussie pg-1.0.0 Documentation d'analyse pour pg-1.0.0 Installation de la documentation ri pour pg-1.0.0 Fait installer la documentation pour pg après 3 secondes 1 gem installé
(la présente partie) "/Bibliothèque/PostgreSQL/9.5/include" vous devez mettre votre Postgres chemin)