Ich verwende die Vorversion von Ruby on Rails 3.1. Ich benutze gerne PostgreSQL, aber das Problem ist die Installation von pg
gem Es gibt folgende Fehlermeldung:
$ gem install pg
Building native extensions. This could take a while...
ERROR: Error installing pg:
ERROR: Failed to build gem native extension.
/home/u/.rvm/rubies/Ruby-1.9.2-p0/bin/Ruby extconf.rb
checking for pg_config... no
No pg_config... trying anyway. If building fails, please try again with
--with-pg-config=/path/to/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** 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=/home/u/.rvm/rubies/Ruby-1.9.2-p0/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
Gem files will remain installed in /home/u/.rvm/gems/Ruby-1.9.2-p0/gems/pg-0.11.0 for inspection.
Results logged to /home/u/.rvm/gems/Ruby-1.9.2-p0/gems/pg-0.11.0/ext/gem_make.out
Wie löse ich dieses Problem?
Es sieht so aus, als ob der Header in Ubuntu Teil des libpq-dev
-Pakets ist (zumindest in den folgenden Ubuntu-Versionen: 11.04 (Natty Narwhal), 10.04 (Lucid Lynx), 11.10 (Oneiric Ocelot), 12.04 (Precise Pangolin), 14.04 (Trusty Tahr) und 18.04 (Bionic Beaver)):
...
/usr/include/postgresql/libpq-fe.h
...
Versuchen Sie also, libpq-dev
oder sein Äquivalent für Ihr Betriebssystem zu installieren:
Sudo apt-get install libpq-dev
yum install postgresql-devel
brew install postgresql
gem install pg -- --with-pg-config=/opt/local/lib/postgresql[version number]/bin/pg_config
zypper in postgresql-devel
pacman -S postgresql-libs
Verwenden Sie unter macOS (zuvor Mac OS X und OS X) Homebrew , um die richtigen Header zu installieren:
brew install postgresql
und dann rennen
gem install pg
sollte arbeiten.
Anstelle der Installation der gesamten postgresql
können Sie alternativ brew install libpq
und die richtige PATH
und PKG_CONFIG_PATH
exportieren, wie im Abschnitt 'Vorbehalte' beschrieben
Ich hatte auch versucht, gem install libpq-dev
auszuführen, aber ich habe folgende Fehlermeldung erhalten:
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Ich fand jedoch, dass die Installation mit Sudo apt-get
(die ich mit Ruby on Rails vermeiden wollte) funktionierte, d. H.
Sudo apt-get install libpq-dev
# or
apt-get install postgres-server-dev-{pg.version}
# for postgresql 9.4 on Ubuntu 14.04
dann konnte ich es tun
gem install pg
ohne Probleme.
Ich könnte das auf andere Weise lösen. Ich habe die Bibliothek nicht in meinem System gefunden. Daher habe ich es mit einer App von der PostgreSQL-Hauptseite installiert. In meinem Fall (OS X) fand ich die Datei unter /Library/PostgreSQL/9.1/include/
, nachdem die Installation abgeschlossen war. Möglicherweise haben Sie die Datei auch an einem anderen Ort, abhängig von Ihrem System, wenn Sie bereits PostgreSQL installiert haben.
Dank dieses Links auf wie füge ich einen zusätzlichen Pfad für die Gem-Installation hinzu , konnte ich den Edelstein mit diesem Befehl auf die lib zeigen
export CONFIGURE_ARGS="with-pg-include=/Library/PostgreSQL/9.1/include/"
gem install pg
Danach funktioniert es, weil es jetzt weiß, wo die fehlende Bibliothek zu finden ist. Ersetzen Sie einfach den Pfad durch den richtigen Ort für Ihre libpq-fe.h
Der Header libpq-fe.h kann nicht gefunden werden
ich hatte Erfolg auf CentOS 7.0.1406 und führte die folgenden Befehle aus:
~ % psql --version # => psql (PostgreSQL) 9.4.1
yum install libpqxx-devel
gem install pg -- --with-pg-config=/usr/pgsql-9.4/bin/pg_config
Alternativ können Sie den Bundler so konfigurieren, dass pg
immer mit diesen Optionen installiert wird (hilfreich beim Ausführen des Bundlers in Implementierungsumgebungen)
bundle config build.pg --with-pg-config=/usr/pgsql-9.4/bin/pg_config
Nur für das Protokoll:
Ruby on Rails 4-Anwendung in OS X mit PostgresApp (in diesem Fall wird die Version 0.17.1 benötigt - Art eines alten Projekts):
gem install pg -v '0.17.1' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_config
In meinem Fall war das Paket postgresql-server-dev-8.4
(ich bin auf Ubuntu 11.04 (Natty Narwhal), 64 Bit).
Unter Mac OS X laufen Sie so:
gem install pg -- --with-pg-config=***/path/to/pg_config***
***/path/to/pg_config***
ist der Pfad zu pg_config
Die richtige Antwort für Mac-Benutzer mit Postgres.app ist das Erstellen der libpq
, die mit diesem Paket geliefert wird. Zum Beispiel ist mit dem Release 9.4 (aktuell zum Zeitpunkt der Veröffentlichung) alles, was Sie brauchen:
export CONFIGURE_ARGS="with-pg-include=/Applications/Postgres.app/Contents/Versions/9.4/include"
gem install pg
Dadurch bleibt Ihr pg
gem mit der von Ihnen installierten Version von PostgreSQL synchron. Die Installation von Homebrew ist in diesem Fall eine Verschwendung.
Ich hatte das gleiche Problem bei Amazon Linux. Ich konnte den Header libpq-fe.h
finden, aber irgendwie hat es nicht funktioniert.
Es kam von den verschiedenen Versionen der Pakete, die von den verschiedenen Benutzern auf dem Computer installiert wurden. PostgreSQL 9.2 und PostgreSQL 9.3 wurden installiert. Stellen Sie daher sicher, dass Ihre PostgreSQL-Version vorhanden ist, bevor Sie die Bibliotheken hinzufügen.
Für mich war die magische Befehlszeile:
Sudo yum install postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel
Eine allgemeinere Antwort für jede Debian-basierte Distribution (die Ubuntu beinhaltet) ist die folgende. Installieren Sie zuerst das apt-file
-Paket, das als root ausgeführt wird:
apt-get install apt-file
Dadurch können Sie nach Paketen suchen, die eine Datei enthalten. Aktualisieren Sie anschließend die Datenbank mit
apt-file update
(kann als normaler Benutzer ausgeführt werden). Suchen Sie dann nach dem fehlenden Header mit:
apt-file search libpq-fe.h
Auf meiner Maschine ergibt dies:
libpq-dev: /usr/include/postgresql/libpq-fe.h
postgres-xc-server-dev: /usr/include/postgres-xc/server/gtm/libpq-fe.h
Da gehts!
Auf einem Mac habe ich es mit diesem Code gelöst:
gem install pg -v '0.18.4' -- --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_config
Ich fand diese Antwort, und es war die einzige, die für mich (Mac OS) funktionierte - nachdem ich ungefähr zwei Tage recherchiert hatte:
$ 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...
Siehe Stapelüberlauf-Frage Die PostgreSQL-Client-Bibliothek (libpq) kann nicht gefunden werden.
Ich hatte das gleiche Problem unter Mac OS, aber ich habe den PostgreSQL-Edelstein auf folgende Weise in einem Terminal installiert:
ARCHFLAGS="-Arch x86_64" gem install pg
(Ich habe PostgreSQL zuerst mit brew install postgresql
installiert.)
Ich habe kürzlich ein Upgrade auf Mac OS X 10.10 (Yosemite) durchgeführt und hatte Schwierigkeiten beim Erstellen des pg
-Gem.
Der gemeldete Fehler war typisch:
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***
Meine Lösung bestand darin, gem uninstall pg
und dann bundle update pg
den Edelstein durch den neuesten zu ersetzen. Ich habe brew update; brew upgrade
nach der Yosemite-Installation ausgeführt, um die neuesten Versionen der Pakete zu erhalten, die ich zuvor installiert hatte.
Auf CentOS habe ich libpq-dev package
mit dem folgenden Befehl installiert
yum install postgresql-devel
Beim Ausführen von gem install pg
wurde derselbe Fehler wie bei "No pg_config... trying anyway. If building fails, please try again with --with-pg-config=/path/to/pg_config
" zurückgegeben.
Die Installation des Edelsteins als unten gelöst hat mein Problem gelöst
gem install pg -- --with-pg-config=/usr/pgsql-x.x/bin/pg_config
Für MacOS ohne PostgreSQL-Server zu installieren:
brew install libpq
gem install pg -- --with-pg-config="/usr/local/Cellar/libpq/9.6.6/bin/pg_config"
Ich verwende Postgres.app auf einem Mac und musste es
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.4/bin
zuerst. Dann
bundle install
arbeitete für mich.
Installieren Sie unter Ubuntu "libpq-dev", um dieses Problem zu beheben.
Sudo apt-get install libpq-dev
Unter CentOS 6.5 (Squeeze) habe ich eine Datei erstellt:
$ Sudo touch /etc/profile.d/psql.sh
mit inhalt:
pathmunge /usr/pgsql-9.3/bin
Beachten Sie hier, dass Sie Ihren PostgreSQL-Pfad mit der Datei pg_config festlegen müssen. Sie können dies mit dem Befehl finden:
$ Sudo find / -iname pg_config
Speicher die Datei:
$ Sudo chmod +x /etc/profile.d/Ruby.sh
und versuchen Sie, Ihren Befehl erneut auszuführen.
Hinweis: Bei jeder Änderung der Bash -Konfiguration - Änderung des Profils.d - Konfiguration sollten Sie Bash neu laden.
Auf Debian 7.0, 64-Bit (Wheezy), führen Sie einfach Folgendes aus:
Sudo apt-get install libpq-dev
Nachdem Sie libpq-dev erfolgreich installiert haben, führen Sie Folgendes aus:
bundle install
Der Ort von libpq-fe.h
hängt davon ab, wo sich Ihre PostgreSQL-Installation befindet (abhängig davon, wie Sie sie installiert haben). Verwenden Sie locate
( http://en.wikipedia.org/wiki/Locate_%28Unix%29 ), um die libpq-fe.h
-Datei auf Ihrem Computer zu finden. Wenn es existiert, befindet es sich im include
-Verzeichnis Ihrer PostgreSQL-Installation.
$ locate libpq-fe.h
/Library/PostgreSQL/9.1/include/libpq-fe.h
Das Verzeichnis bin
, das pg_config
enthält, befindet sich in demselben Verzeichnis wie das Verzeichnis include
. Wie der Fehler vermuten lässt, verwenden Sie die Option --with-pg-config, um den gem zu installieren:
$ gem install pg --with-pg-config="/Library/PostgreSQL/9.1/bin/pg_config"
Beachten Sie, dass Sie möglicherweise updatedb
ausführen müssen, wenn Sie locate
noch nie verwendet haben oder seit der Installation von PostgreSQL nicht aktualisiert wurden.
Ich hatte gerade dies auf OSX, das brew und [email protected]
lief.
Mein Fix war folgendes:
CONFIGURE_ARGS="with-pg-include=/usr/local/opt/[email protected]/include/" bundle install
Ich habe dieses Problem endlich gelöst, jedoch nicht mit den zuvor beschriebenen Methoden.
Mit brew install postgresql
stelle ich fest, dass es bereits installiert war, aber nicht verlinkt wurde.
Finden Sie heraus, wo PostgreSQL installiert ist, und löschen Sie es.
Dann wieder brew install postgresql
,
brew link postgresql
gem install pg
Unter FreeBSD (9.1) ist das erforderliche Paket/usr/ports/database/postgresql-server *, das bei der Installation auch die erforderliche Header-Datei installiert, durch die die gem-Installation von "pg" fehlschlägt. Diese Antwort hier half mir, die Lösung zu finden, aber der Unterschied bei den Paketnamen erforderte ein wenig Recherche.
Hoffentlich hilft dies jemandem, ein bisschen Kopfkratzer zu vermeiden, wenn er auf einem FreeBSD-System nach dem Paket "-dev" sucht!
Für AltLinux
muss das Paket postgresqlx.x-devel
(in meinem Fall postgresql9.5-devel
) installiert sein:
apt-get install postgresql9.5-devel
Ich hatte dieses Problem mit Postgresql 9.6. Ich konnte das Problem beheben, indem ich Folgendes tat:
brew upgrade [email protected]
brew link [email protected] --force
gem install pg
Ich hatte ein ähnliches Problem und dieses Problem wurde für mich behoben:
gem install do_postgres -- --with-pgsql-server-dir=/Applications/Postgres.app/Contents/MacOS --with-pgsql-server-include=/Applications/Postgres.app/Contents/MacOS/include/server
Quelle:
Unter OS X 10.9 (Mavericks) habe ich brew-installed postgresql
und musste dann meinen Ruby rvm reinstall
. Ich bin jetzt glücklich :)
Ich habe dieses Problem gelöst, indem das Paket 'postgresql-common' installiert wurde. Dieses Paket enthält die pg_config
-Binärdatei, die am wahrscheinlichsten fehlte.
Unter OS X und MacPorts ist das -devel
-Paket für PostgreSQL nicht mehr erforderlich. Die Installation des pg
gem funktioniert folgendermaßen:
~ > Sudo port install postgresql-devel
...
Error: postgresql-devel has been replaced by postgresql91; please install that port instead
~ > gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql95/bin/pg_config
Siehe auch diesen Beitrag .
Der gleiche Fehler ist bei Postgres über asdf aufgetreten. Die pg-config-Lösungen haben bei mir nicht funktioniert. Stattdessen musste ich den Postgres-Include-Ordner finden, der die Datei enthält, und den Befehl mit dem Flag --with-pg-include
ausführen
gem install pg -- --with-pg-include=/<path>/.asdf/installs/postgres/<version>/include
Auf Arch Linux müssen Sie postgresql-libs installieren:
Sudo pacman -Syu postgresql-libs
Für Mac OS X installieren Sie einfach https://postgresapp.com/ und befolgen Sie die Schritte für den Befehlszeilenabschnitt und Ruby
Sudo mkdir -p /etc/paths.d &&
echo /Applications/Postgres.app/Contents/Versions/latest/bin | Sudo tee /etc/paths.d/postgresapp
Dann
Sudo ARCHFLAGS="-Arch x86_64" gem install pg
Schritt 1) Stellen Sie sicher, dass Postgress in Ihrem System installiert ist.
apt-get install postgresql postgresql-contrib (sol - fatal error: libpq-fe.h: No such file or directory)
Sudo apt-get install Ruby-dev (required to install postgress below)
Sudo gem install pg
Sudo service postgresql restart
Schritt 2) Einige der C++ - Dateien versuchen, direkt auf libpq-fe.h
zuzugreifen und können nicht finden. Wir müssen also jede solche Datei manuell durchsuchen und libpq-fe.h
durch postgresql/libpq-fe.h
ersetzen.
Der Befehl zum Durchsuchen aller Vorkommen von libpq-fe.h
in allen Verzeichnissen und Unterverzeichnissen lautet grep -rnw ./ -e 'libpq-fe.h'
.
3) Gehen Sie zu Alle in Schritt 2 aufgeführten Dateien, und ändern Sie libpq-fe.h
manuell mit postgresql/libpq-fe.h
.
Nur das Deinstallieren (Sudo apt-get purge) von libpq-dev und das erneute Installieren funktionierten für mich.
Meine Lösung für Fedora 30:
Sudo dnf install /usr/include/libpq-fe.h