J'essaie d'installer PostgreSQL pour Rails sous Mac OS X 10.6. J'ai d'abord essayé l'installation de MacPorts mais cela ne s'est pas bien passé. J'ai donc effectué l'installation DMG en un clic. Cela a semblé fonctionner.
Je pense avoir besoin d'installer les packages de développement PostgreSQL, mais je ne sais pas comment faire cela sous OS X.
Voici ce que je reçois 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
Solution: réinstaller PostgreSQL avec 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...
TRAVAILLÉ!
J'ai essayé la réponse la mieux notée ici:
env ARCHFLAGS="-Arch x86_64" gem install pg
Mais lorsque j'ai essayé d'exécuter à nouveau l'installation de bundles, la même erreur s'est produite. Ensuite, j'ai essayé l'installation complète du paquet avec ARCHFLAGS comme ceci:
ARCHFLAGS="-Arch x86_64" bundle install
Travaillé pour moi! Assurez-vous de remplacer x86_64 par i386 en fonction de votre architecture.
J'avais juste ce problème lorsque j'utilisais le fichier .dmg EnterpiseDB. Si c'est la même chose que vous avez utilisée, je l'ai fait en spécifiant la bonne architecture:
Sudo env ARCHFLAGS="-Arch i386" gem install pg
Il existe sur le Web des tutoriels qui spécifient une architecture différente (telle que "-Arch x86_64" pour les utilisateurs de MacPorts), mais cela ne fonctionnait pas car je n'utilisais que l'installation d'un seul fichier.
Si vous utilisez Yosemite:
brew install postgres
Ensuite:
ARCHFLAGS="-Arch x86_64" gem install pg
Et (facultatif) 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 n'a donné qu'une architecture dans mon cas (installée via homebrew):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
Fake out gem
en préfixant les variables d’environnement appropriées. Si vous avez installé à 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
À partir de là, sortez LIBDIR
, INCLUDEDIR
, CPPFLAGS
, LIBS
et LDFLAGS
(celui qui, à mon avis, vous permettra de courir est LIBDIR
, cependant). Ensuite, vous courriez:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
Sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
Cela devrait le faire pour vous. Faites-moi savoir si ce n'est pas le cas.
Le problème que nous avons eu était assez étrange.
Ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
mais quand nous avons fait une installation de paquet en fait, le paquet n'a pas été installé pour la version de Ruby qui a été installée par rbenv. Par conséquent, lorsque nous avons saisi installation de paquet, il utilisait le paquet du système.
Avant d’exécuter l’installation d’un ensemble, assurez-vous que vous avez installé cet ensemble 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 dans votre programme d'installation. Il est plus probable que le chemin d'installation ne soit pas dans le chemin de votre environnement et par conséquent, gem ne peut pas les trouver lorsqu'il tente de compiler pg.
Vous ne devriez pas avoir à exécuter gem install pg
en tant que root. En fait, si vous le faites, il est probable que votre PATH (le chemin de la racine s'il est exécuté avec Sudo) ne contiendra pas les informations nécessaires.
Ce qui suit fonctionne habituellement pour moi:
# 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 finalement ce que j'ai fait pour moi (combinaison de plusieurs solutions fournies auparavant avec d'autres messages):
$ Sudo env ARCHFLAGS = "- Arch x86_64" pg de l'installation - with-pg-include =/Library/PostgreSQL/9.6/include /
La réponse ARCHFLAGS
que d'autres ont proposée ne fonctionnera pas si vous vous retrouviez avec une version 64 bits de postgres (que homebrew installera) et une version 32 bits de Ruby. Pour une raison quelconque, rbenv
insiste sur la création de Ruby 1.9.2-p290 en tant que 32 bits, ce qui rend impossible la liaison contre les postgres de 64 bits.
Vérifiez l’architecture de votre binaire Ruby avec
file `which Ruby`
ou si vous utilisez rbenv
file `rbenv which Ruby`
Et comparez avec vos postgres:
file `which postgres`
En cas de problème, vous devrez réinstaller Postgres ou Ruby. Avec rbenv, j'ai résolu ce problème en passant à une autre version: 1.9.3-p194
au lieu de 1.9.2-p290
.
Donc en gros j'ai fait ça ;-)
brew install postgres
C'est comme ça que j'ai réussi à travailler sur Mavericks. Remarque: j’avais déjà installé postgresql 9.3 depuis homebrew.
Mise à jour de Xcode vers 5.0 depuis l'App Store
Installer des outils de développement en ligne de commande
xcode-select --install
Accepter la licence Xcode
Sudo xcodebuild -license
Installer gem
ARCHFLAGS = "- Arch x86_64" gem install pg
Je suis probablement un peu en retard à la fête ici, mais dans mon cas, j'utilisais Rbenv et la mise à niveau vers Ruby 2.2.3. Je devais installer Bundler pour que le mien fonctionne, j'avais une ancienne version du système.
gem install bundler
Sur Mac, vous pouvez essayer (fonctionne pour moi): Gem install pg - with-pg-include =/Bibliothèque/PostgreSQL/9.5/include Recherche: 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 de pg-1.0.0 Analyse pour pg-1.0.0 Installation de la documentation de ri pour pg-1.0.0 Terminé installation de la documentation pour pg après 3 secondes 1 gem installé
(cette partie "/Library/PostgreSQL/9.5/include" vous devez mettre votre chemin Postgres)
Comme mentionné ci-dessus, cela a à voir avec le fait d'avoir deux arcs Ruby 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 je devais faire était simplement d'installer pg
gem forçant x86_64
Arch à utiliser avec cette commande:
Sudo env ARCHFLAGS="-Arch x86_64" gem install pg
N'oubliez pas d'avoir votre bash_profile
à jour
Ajoutez le chemin de votre postgres, dans ce cas, utilisez l'application Postgres (OSX
) au lieu de brew
( https://postgresapp.com/ ) par défaut, il s'agit de 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 réussi à installer pg gem
J'espère que cela t'aides!