我正在尝试在Mac OS X 10.6上安装PostgreSQL for Rails。首先我尝试了MacPorts安装,但是进展不顺利,所以我做了一键式DMG安装。这似乎有效。
我怀疑我需要安装PostgreSQL开发包,但我不知道如何在OS X上执行此操作。
这是我尝试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
答案 0 :(得分:346)
$ 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...
工作!
答案 1 :(得分:31)
使用EnterpiseDB .dmg时,我遇到了这个问题。如果您认为这是相同的,那么我通过指定正确的架构来实现它:
sudo env ARCHFLAGS="-arch i386" gem install pg
网上有一些教程可以指定一个不同的架构(比如使用MacPorts的人使用“-arch x86_64”),但是因为我使用了单个文件安装而无法使用它。
答案 2 :(得分:23)
如果使用Yosemite:
brew install postgres
然后:
ARCHFLAGS="-arch x86_64" gem install pg
(可选)最后,如果你想启动autovacuum ......
postgres -D /usr/local/var/postgres
答案 3 :(得分:21)
也许你可以尝试这个:
ARCHFLAGS="-arch i386 -arch x86_64" gem install pg
要了解您的库的架构,您可以使用
file /usr/local/lib/libpq.dylib
在我的案例中只提供了1个架构(通过自制软件安装):
/usr/local/lib/libpq.dylib: Mach-O 64-bit dynamically linked shared library x86_64
答案 4 :(得分:18)
解决方案:使用Homebrew重新安装PostgreSQL。
答案 5 :(得分:6)
通过为相应的环境变量添加前缀来假出gem
。如果您是从MacPorts安装的,那么您应该能够完成以下过程:
% /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
从那里,拉出LIBDIR
,INCLUDEDIR
,CPPFLAGS
,LIBS
和LDFLAGS
(我认为会让你运行的是{但是,{1}}。然后你就跑了:
LIBDIR
那应该为你做。如果没有,请告诉我。
答案 6 :(得分:5)
我们遇到的问题非常奇怪。
ruby -v # was ok (rbenv)
gem -v # was ok (rbenv)
但是当我们实际进行捆绑安装时,没有为rbenv安装的ruby版本安装bundler,因此,当我们键入bundle install时,它使用了系统的bundler。
因此,在运行bundle install之前,请确保已通过运行
安装了bundlergem install bundler
答案 7 :(得分:3)
我认为您不需要postgres开发文件,您需要的所有内容都应该包含在安装程序中。它们安装的路径更可能不在您的环境路径中,因此gem在尝试编译pg时无法找到它们。
你不应该以root身份运行gem install pg
,事实上如果你这样做,很可能你的PATH(root的路径,如果运行w / sudo)将不包含必要的信息。
以下通常对我有用:
# 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
答案 8 :(得分:3)
这是最终为我做的事情(之前提供的多种解决方案与其他帖子的组合):
$ sudo env ARCHFLAGS =“ - arch x86_64”gem install pg - with-pg-include = / Library / PostgreSQL / 9.6 / include /
答案 9 :(得分:2)
错误信息就在那里:
Can't find the PostgreSQL client library (libpq)
您可以通过使用自制软件安装来解决此问题
brew install libpq
将出现以下或类似的消息:
If you need to have libpq first in your PATH, run:
echo 'export PATH="/opt/homebrew/opt/libpq/bin:$PATH"' >> ~/.zshrc
For compilers to find libpq you may need to set:
export LDFLAGS="-L/opt/homebrew/opt/libpq/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libpq/include"
然后你可以运行它:
export PATH="/opt/homebrew/opt/libpq/bin:$PATH"
gem install pg
完成。
答案 10 :(得分:1)
这就是我在小牛队工作的方式。注意:我已经从homebrew安装了postgresql 9.3。
从App Store将Xcode更新为5.0
安装命令行开发人员工具
xcode-select --install
同意Xcode许可证
sudo xcodebuild -license
安装宝石
ARCHFLAGS =“ - arch x86_64”gem install pg
答案 11 :(得分:1)
所以基本上我做了这个; - )
brew install postgres
答案 12 :(得分:1)
如果你以某种方式结束了64位版本的postgres(自制软件将安装)和32位版本的ruby,那么其他人提出的ARCHFLAGS
答案将无效。出于某种原因,rbenv
坚持将ruby 1.9.2-p290构建为32位,这样就无法链接到64位postgres。
使用
检查ruby二进制文件的体系结构file `which ruby`
或者如果使用rbenv
file `rbenv which ruby`
与你的postgres比较:
file `which postgres`
如果不匹配,您需要重新安装postgres或ruby。使用rbenv我只需切换到另一个版本即可解决此问题:1.9.3-p194
而不是1.9.2-p290
。
答案 13 :(得分:0)
我在这里可能有点晚了,但在我的情况下,我使用的是rbenv并升级到Ruby 2.2.3。我不得不安装Bundler让我的工作,我有一个旧的系统版本。
gem install bundler
答案 14 :(得分:0)
如上所述,这与在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]
上具有两个红宝石拱形有关,我要做的就是简单地安装pg
gem force x86_64
拱形用于该命令:
sudo env ARCHFLAGS="-arch x86_64" gem install pg
记住要使您的bash_profile
保持最新状态
添加您的postgres路径,在这种情况下,我默认使用Postgres应用(OSX
)而非brew
(https://postgresapp.com/),这是位置:
export PATH=/Applications/Postgres.app/Contents/Versions/10/bin:$PATH
使用
重新加载bash
sudo vi ~/.bash_profile
完成此操作后,我终于可以成功安装pg gem
希望这会有所帮助!
答案 15 :(得分:0)
在Mac上,您可以尝试以下操作(适用于我): gem install pg-使用pg-include = / Library / PostgreSQL / 9.5 / include 正在抓取:pg-1.0.0.gem(100%) 使用以下方法构建本机扩展:'with-pg-include = / Library / PostgreSQL / 9.5 / include' 这可能需要一段时间... 成功安装pg-1.0.0 pg-1.0.0的解析文档 安装pg-1.0.0的ri文档 3秒钟后完成pg的安装文档 已安装1个宝石
(这部分是“ /Library/PostgreSQL/9.5/include”,必须放置Postgres路径)
答案 16 :(得分:0)
这些答案中的大多数都专注于为您提供一个有效的命令。 但是它们仅适用于某些特定场景。 如果您在确定应该运行哪个命令时遇到问题,您最好了解发生了什么。
pg
gem 是用 C 编写的本机扩展。它依赖于 libpq
库,后者是 C 应用程序的 PostgreSQL 库。
因此,在构建过程中,pg
gem 需要能够找到为同一个 architecture 编译的库 libqp
(例如 x86_64
或 {{1 }}).
在以下情况下可能存在不匹配:
arm64
。postgres
。如果您最终遇到这种情况,您有几种选择:
postgres
相同的架构中编译 pg
gempostgres
的架构(默认情况下它与 gem
的相同)例如,就我而言,我有一台 m1 macbook。
我已经在“rosetta 2”模式 (ruby
) 下安装了 ruby,在“本机”模式 (x86_64
) 下安装了 postgres。
您可以使用 arm64
命令检查架构:
lipo -info
rbenv which ruby
=> /Users/leo/.rbenv/versions/2.6.6/bin/ruby
lipo -info /Users/leo/.rbenv/versions/2.6.6/bin/ruby
=> /Users/leo/.rbenv/versions/2.6.6/bin/ruby is architecture: x86_64
为了解决这个问题,就我而言,我只需要向 which postgres
=> /opt/homebrew/bin/pg_config
lipo -info /opt/homebrew/bin/pg_config
=> Non-fat file: /opt/homebrew/bin/pg_config is architecture: arm64
中编译的 PATH
添加另一个版本的 postgres
。它允许 x86_64
gem 能够在正确的架构中找到二进制文件:
pg