Ich versuche, PostgreSQL für Rails unter Mac OS X 10.6 zu installieren. Zuerst habe ich die MacPorts-Installation ausprobiert, aber das ging nicht gut, also habe ich die One-Click-DMG-Installation durchgeführt. Das schien zu funktionieren.
Ich habe den Verdacht, dass ich die PostgreSQL-Entwicklungspakete installieren muss, aber ich habe keine Ahnung, wie das unter OS X zu tun ist.
Folgendes bekomme ich, wenn ich versuche, Sudo gem install pg
zu tun:
$ 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
Lösung: PostgreSQL mit Homebrew neu installiert.
$ 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...
HAT FUNKTIONIERT!
Ich habe hier die bestbewertete Antwort ausprobiert:
env ARCHFLAGS="-Arch x86_64" gem install pg
Als ich jedoch versuchte, die Bundle-Installation erneut auszuführen, gab es den gleichen Fehler. Dann habe ich versucht, das gesamte Bundle mit ARCHFLAGS so zu installieren:
ARCHFLAGS="-Arch x86_64" bundle install
Arbeitete für mich! Stellen Sie sicher, dass Sie x86_64 durch i386 ersetzen, abhängig von Ihrer Architektur.
Ich hatte gerade dieses Problem bei der Verwendung der EnterpiseDB .dmg. Wenn das derselbe Gedanke ist, den Sie verwendet haben, habe ich es durch die Angabe der richtigen Architektur zum Laufen gebracht:
Sudo env ARCHFLAGS="-Arch i386" gem install pg
Es gibt einige Tutorials im Web, die besagten, eine andere Architektur anzugeben (wie "-Arch x86_64" für Benutzer, die MacPorts verwendeten), aber es funktionierte nicht für mich, da ich die Installation der einzelnen Datei verwendete.
Wenn Sie Yosemite verwenden:
brew install postgres
Dann:
ARCHFLAGS="-Arch x86_64" gem install pg
Und (optional) Endlich, wenn Sie Autovakuum starten möchten ...
postgres -D /usr/local/var/postgres
Vielleicht kannst du dieses probieren:
ARCHFLAGS="-Arch i386 -Arch x86_64" gem install pg
Um die Architektur Ihrer Bibliothek kennenzulernen, können Sie diese verwenden
file /usr/local/lib/libpq.dylib
was in meinem Fall nur 1 Architektur ergab (installiert über Homebrew):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
Fake out gem
durch Präfix der entsprechenden Umgebungsvariablen. Wenn Sie von MacPorts aus installieren, sollten Sie die folgenden Schritte ausführen können:
% /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
Ziehen Sie von dort die Variablen LIBDIR
, INCLUDEDIR
, CPPFLAGS
, LIBS
und LDFLAGS
heraus (die, von denen ich glaube, dass Sie zum Laufen gebracht werden, ist LIBDIR
). Dann würden Sie laufen:
setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
Sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg
Das sollte es für dich tun. Lass es mich wissen, wenn es nicht so ist.
Das Problem, das wir hatten, war ziemlich komisch.
Ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
als wir jedoch eine Bundle-Installation durchgeführt haben, wurde für die von rbenv installierte Ruby-Version kein Bundler installiert. Wenn Sie also die Bundle-Installation eingaben, wurde der Bundler des Systems verwendet.
Stellen Sie daher vor der Bundle-Installation sicher, dass Sie den Bundler durch Ausführen installiert haben
gem install bundler
Ich glaube nicht, dass Sie die Postgres-Entwicklungsdateien benötigen. Alles, was Sie brauchen, sollte in Ihrem Installationsprogramm enthalten sein. Es ist wahrscheinlicher, dass sich der Pfad, in dem sie installiert werden, nicht in Ihrem Umgebungspfad befindet, und daher kann gem sie nicht finden, wenn er pg kompiliert.
Sie sollten gem install pg
nicht als root ausführen müssen. Wenn Sie dies tun, ist es wahrscheinlich, dass Ihr PATH (Roots PATH, wenn run mit Sudo ausgeführt wird) nicht die erforderlichen Informationen enthält.
Folgendes funktioniert normalerweise für mich:
# 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
Dies ist, was schließlich für mich getan hat (Kombination mehrerer zuvor bereitgestellter Lösungen mit anderen Beiträgen):
$ Sudo env ARCHFLAGS = "- Arch x86_64" gem install pg - with-pg-include =/Library/PostgreSQL/9.6/include /
Die ARCHFLAGS
-Antwort, die von anderen vorgeschlagen wurde, funktioniert nicht, wenn Sie irgendwie eine 64-Bit-Version von Postgres (die von Homebrew installiert wird) und eine 32-Bit-Version von Ruby erhalten. Aus irgendeinem Grund besteht rbenv
darauf, Ruby 1.9.2-p290 als 32-Bit für mich zu erstellen, was eine Verknüpfung mit 64-Bit-Postgres unmöglich macht.
Überprüfen Sie die Architektur Ihrer Ruby-Binärdatei mit
file `which Ruby`
oder wenn Sie Rbenv verwenden
file `rbenv which Ruby`
Und vergleiche gegen deine Postgres:
file `which postgres`
Wenn es eine falsche Übereinstimmung gibt, müssen Sie Postgres oder Ruby erneut installieren. Mit rbenv habe ich das Problem gelöst, indem ich zu einer anderen Version gewechselt bin: 1.9.3-p194
statt 1.9.2-p290
.
Also im Grunde habe ich das gemacht ;-)
brew install postgres
So habe ich es geschafft, an Mavericks zu arbeiten. Hinweis: Ich hatte bereits postgresql 9.3 von Homebrew installiert.
Aktualisieren Sie Xcode aus dem App Store auf 5.0
Installieren Sie Befehlszeilen-Entwicklerwerkzeuge
xcode-select --install
Xcode-Lizenz zustimmen
Sudo xcodebuild -Lizenz
Edelstein installieren
ARCHFLAGS = "- Arch x86_64" gem install pg
Ich bin wahrscheinlich zu spät zur Party hier, aber in meinem Fall habe ich rbenv verwendet und auf Ruby 2.2.3 aktualisiert. Ich musste Bundler installieren, um meinen zu arbeiten, ich hatte eine alte Systemversion.
gem install bundler
Auf einem Mac können Sie dies versuchen (funktioniert für mich): Gem install pg - with-pg-include =/Library/PostgreSQL/9.5/include Holen: pg-1.0.0.gem (100%) Erstellen nativer Erweiterungen mit: 'with-pg-include =/Library/PostgreSQL/9.5/include' Dies kann eine Weile dauern ... Die Installation der Dokumentation pg-1.0.0 .__ für pg-1.0.0 Installieren der ri-Dokumentation für pg-1.0.0 Nach der Installation der Dokumentation für pg nach 3 Sekunden 1 gem installiert
(diesen Teil "/Library/PostgreSQL/9.5/include" müssen Sie Ihren Postgres-Pfad angeben.)
Wie oben erwähnt, hat dies mit der Tatsache zu tun, dass sich zwei Ruby-Bögen auf 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]
befinden. Ich musste einfach pg
gem forcing x86_64
Arch installieren, das mit diesem Befehl verwendet werden soll:
Sudo env ARCHFLAGS="-Arch x86_64" gem install pg
Denken Sie daran, Ihren bash_profile
auf dem neuesten Stand zu haben
Fügen Sie den Pfad Ihrer Postgres hinzu. In diesem Fall verwende ich die Postgres-App (OSX
) anstelle von brew
( https://postgresapp.com/ ).
export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH
Laden Sie die Bash mit
Sudo vi ~/.bash_profile
Danach konnte ich endlich pg gem
erfolgreich installieren.
Hoffe das hilft!