PostgreSQL istemci kitaplığını (libpq) bulamıyorum


147

Mac OS X 10.6'da PostgreSQL for Rails kurmaya çalışıyorum. Önce MacPorts kurulumunu denedim ama bu iyi gitmedi, bu yüzden tek tıkla DMG kurulumunu yaptım. Bu işe yaradı.

PostgreSQL geliştirme paketlerini yüklemem gerektiğinden şüpheleniyorum, ancak bunu OS X'te nasıl yapacağım hakkında hiçbir fikrim yok.

İşte yapmaya çalıştığımda elde ettiğim şey 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'in 8.3 sürümünü yüklediniz mi yoksa eski bir yüklemeyi mi alıyor? Eğer 8.3 kütüphaneler /Library/PostgreSQL/8.3/lib içinde olmalıdır, lütfen orada olup olmadığını kontrol edin.
Eelke

8.3 sürümünü yaptım ve evet, görünüşe göre her şey orada.
Jason Swett

Çıktısını gönderebilir misin pg_config? Bu, yardım etmemizi kolaylaştırır.
justis

Mu projesiyle çalışması için -v '0.14.0' sürümünü eklemek zorunda kaldım
Matthieu Rouif

Yanıtlar:


348
$ 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...

ÇALIŞTI!


2
Projemle çalışması için "env ARCHFLAGS =" - arch x86_64 "gem install -v '0.14.0'" sürümünü eklemek zorunda kaldım
Matthieu Rouif

6
OS X Mavericks için çalıştı. Benim için buenv ARCHFLAGS="-arch x86_64" gem install pg -v '0.17.1' -- --with-pg-config=/opt/local/lib/postgresql91/bin/pg_config
Dawei Yang

17
Ve "Postgres.app" kullanıyorsanız, mavericks altında şunu yapmalısınız: env ARCHFLAGS = "- arch x86_64 gem install pg - --with-pg-config = / Applications / Postgres.app / Contents / Versions / 9.3 / bin / pg_config (Postgres.app sürüm 9.3'ü kullandığınızı varsayın, çünkü pg_config'in konumu farklı bir sürüm kullanırsanız değişebilir, ancak yine de bulabilirsiniz)
Zhaonan

2
Bu benim için çalıştı ve 2 saatlik bir kesintiyi bozdu. Raylarda yeniyim ve bu sinir bozucuydu. Önceki yorumcu gibi, Mavericks'te Postgres.app yükleyicisini kullanıyordum. ARCHFLGS env değişkeninin bu kadar önemli olduğunun farkında değildim. Açıklama burada.
GNat

3
Soru, bu neden işe yarıyor? "ARCHFLAGS =" - arch x86_64 "ne işe yarıyor ve vanilya mücevher kurulumu neden çalışmıyor? Bir mücevher takmak bu kadar zor olmamalı.
Jared Menard

78

En çok oy alan cevabı burada denedim:

env ARCHFLAGS="-arch x86_64" gem install pg

Ancak paket yüklemeyi tekrar çalıştırmayı denediğimde aynı hatayı aldı. Sonra tüm paket kurulumunu ARCHFLAGS ile şöyle denedim:

ARCHFLAGS="-arch x86_64" bundle install

Benim için çalıştı! Sahip olduğunuz mimariye bağlı olarak x86_64'ü i386 ile değiştirdiğinizden emin olun.


2
Çok teşekkür ederim. Bu benim için çalıştı. Bu sorunu bir saatten fazla bir süredir çözmeye çalışıyorum ve bu kod bunu yaptı - ARCHFLAGS = "- arch x86_64" paket yükleme
piratetone

@piratetone 'un eklenmesi benim için High Sierra'da çalıştı
22'de

@Christine için minnettarım, benim için High Sierra'da çalıştı
Ymow Wu

31

EnterpiseDB .dmg kullanırken bu sorunu yaşıyordum. Kullandığınız düşüncenin aynısı buysa, doğru mimariyi belirleyerek çalışmasını sağladım:

sudo env ARCHFLAGS="-arch i386" gem install pg

Web'de farklı bir mimari (MacPorts kullanan kişiler için "-arch x86_64" gibi) belirtmeyi söyleyen bazı öğreticiler var, ancak tek dosya yüklemesini kullandığım için benim için çalışmıyordu.


6
x86_64 benim için çalıştı (Mac OS 10.6.8, PostgreSQL homebrew aracılığıyla yüklendi: mxcl.github.com/homebrew )
chesterbr

2
Bir çözüm bulmak için saatler harcadınız ve sizinki çalıştı, bobfet1 & @chester. Teşekkürler! :-))) ** sudo env ARCHFLAGS = "- arch x86_64" gem kurulum pg **
rassom

24

Yosemite kullanıyorsanız:

brew install postgres

Sonra:

ARCHFLAGS="-arch x86_64" gem install pg

Ve (isteğe bağlı) nihayet, autovacuum'u başlatmak istiyorsanız ...

postgres -D /usr/local/var/postgres

21

Belki bunu deneyebilirsin:

ARCHFLAGS="-arch i386 -arch x86_64" gem install pg

Kütüphanenizin mimarisini öğrenmek için kullanabilirsiniz

file /usr/local/lib/libpq.dylib 

bu benim durumumda sadece 1 mimari verdi (homebrew aracılığıyla kuruldu):

/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64

+1 Kitaplığımın hangi mimari olduğunu bilmemle ilgili ipucu için teşekkürler!
Spike

Ayrıca Ruby ikilinizin mimarisini kontrol edin.
Leopd

18

Çözüm: PostgreSQL, Homebrew ile yeniden yüklendi.


1
Tebrikler! Birisine ödül vermeyi unutmayın. Son çözüm olmasa bile birkaç kişi yardım etmek için çok uğraştı ve ödül teklif ettiğinizde itibar puanları zaten harcandı.
justis

2
Bunun neden -1 aldığından emin değilim, diğer yöntemlerden
hiçbiri

Ayrıca ARCHFLAGS yöntemini kullanmak zorunda kaldım, ancak postresql'i homebrew ile yeniden yükleyene kadar çalışmadı.
Dave Cowart

Yosemite (10.10.3) için çalıştı. brew PostgreSQL kurulumu
roosevelt

Bu benim için işe yaramadı. Bunun başka herhangi bir şey yerine "yerleşik" Ruby (sanırım) kullanmamla bir ilgisi olup olmadığını merak ediyorum: |
rogerdpack

6

gemUygun ortam değişkenlerinin önüne ekleyerek sahte olun . MacPorts'tan kuruyorsanız, aşağıdaki yordamı uygulayabilmelisiniz:

% /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

Oradan çekip LIBDIR, INCLUDEDIR, CPPFLAGS, LIBSve LDFLAGS(I çalıştırmakta alacak düşünüyorum birini LIBDIRAncak). Sonra koşarsın:

setenv PATH /opt/local/lib/postgresql91/bin:${PATH}
sudo env LDFLAGS=-L`pg_config --libdir` CPPFLAGS=`pg_config --cppflags` gem install pg

Bunu senin için yapmalı. Olmazsa bana haber ver.


PostgreSQL için MacPorts yerine tek tıklamayla yükleyiciyi kullandım. Eşdeğer komutun ne olacağını bilmiyorum.
Jason Swett

Şansınız olup olmadığına bakın (Mac'in güncellenmiş b komut dosyasının Cumartesi gecesi çalıştığını düşünüyorum):locate pg_config
Sean

Hala için anlamına geleceğini bilmiyorum CPPFLAGSya LDFLAGS(Özür, Bunların ne bilmiyorum).
Jason Swett

Ama locate pg_configyine de bana bir şeyler gösterdi. Ve MacPorts aracılığıyla PostgreSQL'i kurmayı ve komutunuzu kullanmayı denedim - işe yaramadı.
Jason Swett

1
Yukarıdaki örnek güncellendi. Bunun sorununuzu çözeceğine inanıyorum. Yakalama, LDFLAGSiçerdiği dizine ayarlanmamasıydı libpq. Ayrıntılar için yukarıya bakın.
Sean

5

Karşılaştığımız sorun oldukça tuhaftı.

ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)

ama aslında bir bundle kurulumu yaptığımızda, rbenv tarafından kurulan ruby ​​versiyonu için bundler kurulmamıştı, bu yüzden bundle install yazdığımızda sistemin paketleyicisini kullanıyordu.

Bu nedenle, paket yüklemeyi çalıştırmadan önce, paketleyiciyi çalıştırarak yüklediğinizden emin olun.

gem install bundler

Bu benim durumumda çalıştı (taze macOS High Sierra, rbenv kullanarak ve çoğunlukla brew ile yükleme). Paketi muhtemelen ... sorun oldu elma şeyleri, kullanıyordum
Saza

3

Postgres geliştirme dosyalarına ihtiyacınız olduğunu sanmıyorum, ihtiyacınız olan her şey yükleyicinize dahil edilmiş olmalı. Yüklendikleri yolun ortam yolunda olmaması ve bu nedenle gem, pg'yi derlemeye çalıştığında onları bulamaması daha olasıdır.

gem install pgKök olarak çalıştırmanız gerekmemelidir , aslında bunu yaparsanız muhtemelen PATH'niz (w / sudo çalıştırılırsa kökün PATH'i) gerekli bilgileri içermeyecektir.

Aşağıdakiler genellikle benim için işe yarar:

# 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

Koşu gem install pg (önceki iki komutunuzla birlikte) yerine sudo gem install pghala aynı sonuçları verir.
Jason Swett

32 veya 64 bit mimaride misiniz? Yukarıdakileri diğer mimari bayrakla denediniz mi? Ayrıca /Library/PostgreSQL/...postgres kurulum kopyanızın bulunduğu yerin doğru yerini değiştirdiniz mi?
Brett Bender

Listelediğim komutları yapmakla ilgili notlarıma baktım. Görünüşe göre Postgres'i sudo port install postgresql83 postgresql83-serverşu talimatlara benzer şekilde yükledim : flux88.com/2010/06/installing-postgresql-for-rails-on-mac-os-x . Bağımsız yükleyici 32 bit gibi görünüyor, bu nedenle makineniz 64 bit olsa bile kemer işaretlerinizi 32 bit olarak ayarlamak istiyorsunuz. Çalışmasını sağlayamazsanız, MacPorts aracılığıyla kaldırıp yeniden yüklemenizi ve ardından yukarıdaki talimatları denemenizi öneririm. Umarım yardımcı olur!
Brett Bender

3

Sonunda benim için yaptığım şey buydu (daha önce sağlanan birden fazla çözümün diğer gönderilerle birlikte kombinasyonu):

$ sudo env ARCHFLAGS = "- arch x86_64" gem kurulum pg --pg-include = / Library / PostgreSQL / 9.6 / include / ile


Yukarıdaki çözüm benim için Mac OS High Sierra sudo env ARCHFLAGS = "- arch x86_64" gem install pg -v '1.1.2' - ile-pg-include = / usr / local / Cellar / postgresql / 10.5 / include ile çalıştı Dahil etme klasörünün tam yolunu bulun ve buna göre güncelleyin.
maniempire

1

ARCHFLAGSDiğerleri bir şekilde Postgres'e 64-bit sürümüne (homebrewleri kuracaktır olan) ve yakut bir 32 bit sürümü ile değil iş bitti eğer önerisi olduğunu da cevap. Bazı nedenlerden dolayı rbenvbenim için yakut 1.9.2-p290'ı 32-bit olarak oluşturmakta ısrar ediyor, bu da 64-bit postgres ile bağlantı kurmayı imkansız kılıyor.

Ruby ikilinizin mimarisini kontrol edin

file `which ruby`

veya rbenv kullanıyorsanız

file `rbenv which ruby`

Ve posterlerinizle karşılaştırın:

file `which postgres`

Bir yanlış eşleşme varsa postgres veya ruby'i yeniden yüklemeniz gerekir. Rbenv ile bunu sadece farklı bir sürüme geçerek çözdüm: 1.9.3-p194yerine 1.9.2-p290.


1

Mavericks'te çalışmasını bu şekilde yaptım. Not: Postgresql 9.3'ü homebrew'den zaten kurmuştum.

  1. Xcode'u App Store'dan 5.0'a güncelleyin

  2. Komut satırı geliştirici araçlarını yükleyin

    xcode-select - install

  3. Xcode lisansını kabul edin

    sudo xcodebuild-lisans

  4. Gem yükleyin

    ARCHFLAGS = "- arch x86_64" gem kurulum sayfası



0

Muhtemelen buradaki partiye biraz geç kaldım, ancak benim durumumda rbenv kullanıyordum ve Ruby 2.2.3'e yükseltiyordum. Benimkini çalıştırmak için Bundler'ı kurmam gerekiyordu, eski bir sistem sürümüm vardı.

gem install bundler


0

Yukarıda bahsedildiği gibi, bunun rbenv üzerinde iki yakut kemerinin olması gerçeğiyle /usr/bin/ruby: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [i386:Mach-O executable i386]ilgisi var, yapmam gereken şey , bu komutla kullanılacak pggem forcing arch'ı kurmaktı x86_64:

sudo env ARCHFLAGS="-arch x86_64" gem install pg

Senin sahip unutmayın bash_profilebugüne kadar yukarı

Postgres'inizin yolunu ekleyin, bu durumda Postgres uygulamasını ( OSX) kullanarak im brew( https://postgresapp.com/ ) yerine varsayılan olarak bu konumdur:

export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH

Bash'i şununla yeniden yükle:

sudo vi ~/.bash_profile

Bunu yaptıktan sonra nihayet başarıyla kurabildim pg gem

Bu yardımcı olur umarım!


0

Mac'te şunu deneyebilirsiniz (benim için çalışıyor): gem install pg - with-pg-include = / Library / PostgreSQL / 9.5 / include Getirme: pg-1.0.0.gem (% 100) Yerel uzantılar oluşturmak için: ' with-pg-include = / Library / PostgreSQL / 9.5 / include 'Bu biraz zaman alabilir ... pg-1.0.0 için belgelerin ayrıştırılması başarıyla kuruldu pg-1.0.0 için ri belgelerinin kurulması pg-1.0.0 Belgelerin yüklenmesi tamamlandı 3 saniye sonra pg için 1 taş takıldı

(bu kısım "/Library/PostgreSQL/9.5/include" Postgres yolunuzu koymalısınız)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.