如何在Ubuntu上安装PostgreSQL的pg gem?


292

我正在尝试为Ruby安装PostgreSQL的pg gem。

我发出了以下命令:

gem install pg

我使用RVM安装了Ruby 1.9.2。

上面的命令向我显示了以下错误。

错误是:

Building native extensions.  This could take a while...

ERROR:  Error installing pg:

ERROR: Failed to build gem native extension.

/home/User/.rvm/rubies/ruby-1.9.2-preview3/bin/ruby extconf.rb

checking for pg_config... yes
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=/home/User/.rvm/rubies/ruby-1.9.2-preview3/bin/ruby
 --with-pg
 --without-pg
 --with-pg-config
 --without-pg-config
 --with-pg-dir
 --without-pg-dir
 --with-pg-include
 --without-pg-include=${pg-dir}/include
 --with-pg-lib
 --without-pg-lib=${pg-dir}/lib
 --enable-static-build
 --disable-static-build
 --with-pqlib
 --without-pqlib
 --with-libpqlib
 --without-libpqlib
 --with-ms/libpqlib
 --without-ms/libpqlib

Gem files will remain installed in /home/user/.rvm/gems/ruby-1.9.2-preview3/gems/pg-0.9.0 for inspection.

Results logged to /home/user/.rvm/gems/ruby-1.9.2-preview3/gems/pg-0.9.0/ext/gem_make.out

我不知道这是什么错误...


1
apt install postgresql-server-dev-all适用于Ubuntu 18.04。
理查德·佩克

Answers:


678

您需要安装带有PostgreSQL标头的postgreSQL dev软件包

sudo apt-get install libpq-dev

我按照您的建议做了...得到以下需要获得0B档案。打开包装后,将释放5378kB。你要继续吗?[Y / n /?]是写入扩展状态信息...完成(读取数据库...当前安装的166183文件和目录。)删除野牛...删除libnss3-dev ...删除libnspr4-dev ...删除libqt4-core ...删除libqt4-test ...删除libsqlite3-dev ...处理man-db的触发器..
palani 2010年

3
对于像我这样真正了解Ubuntu的人,但sudo apt-get install aptitude首先真正使用它们的人是:)
Haris Krajina 2012年

1
尝试了各种组合。即使在重新安装postgres和libpq之后。没有运气..仍然是同样的问题
Krishnaprasad Varma

5
对于Cent / RedHat风格的发行版,您需要的软件包是yum install postgresql-devel
Kyril

1
我感觉由于某些人的Ubuntu版本,这可能不适用于某些人。对于Postgres 9.1
Rebs,

40

阅读并经过2天的反复测试,并尝试了其他注释中发现的许多问题之后,以下单行是在Ubuntu Lucid 10.04上对我的解决方法,其中混有一些Maverick软件包和RVM(红宝石1.9.2-p290,rvm 1.10.2 ruby​​gems 1.8.15,rails 3.0.1,postgres 8.4.10):

gem install pg  --   --with-pg-lib=/usr/lib   

结果:

Building native extensions.  This could take a while...  
Successfully installed pg-0.13.1  
1 gem installed  
Installing ri documentation for pg-0.13.1...  
Installing RDoc documentation for pg-0.13.1...  

{是的-终于成功了}!注意,在我的Ubuntu / Postresql安装中,运行pg_config的输出缺少LIBS变量中的-lpq项!

以及为什么在某些地方从pq切换到pg-会使新手感到困惑?

我仍然不明白的是-和--with(option)的双重集合,但无论如何我都超出了我的深度


2
“-”通常用于将参数与第二个命令分开,在这种情况下,是extmod的配置脚本
Timothy Meade

1
谢谢。您的解决方案是完美的。
2012年

非常感谢您分享此解决方案。被困了一天。很高兴我遇到了这个帖子。
发狂

30

我在Ubuntu 12.10上并运行以下命令:

apt-get install libpq-dev

帮助了我-在那之后运行了gem安装pg -v“ 0.14.1”,现在一切都很好




24

安装libpq-dev对我不起作用。我还需要安装build-essential

sudo apt-get install libpq-dev build-essential

16

针对Ubuntu用户的简单解决方案...

首先卸载所有postgres软件包,然后运行这些命令。

sudo apt-get install postgresql
sudo apt-get install postgresql-client libpq5 libpq-dev

# for rvm (single user)
mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 

# for rvm (multi-user)
mv /usr/local/rvm/usr/lib /usr/local/rvm/usr/lib_rvm

gem install pg  --   --with-pg-lib=/usr/lib

然后运行“捆绑安装”。一切都会好起来的。祝你有美好的一天!


1
如果人们对如何删除所有postgres软件包感到好奇,请使用sudo apt-get remove --purge postgresql postgresql-9.3(或任何您拥有的postgres版本)。
Tommyixi

9

对于.RVM用户,它将更好:

rvmsudo gem install pg -- --with-pg-lib=/usr/lib 

它为我工作(在我看到jdupont版本之后)


7

如果您已安装libpq-dev并仍然存在此问题,则可能是由于OpenSSL的libssl和朋友的版本冲突-/ usr / lib中的Ubuntu系统版本(针对libpq构建)和在$中安装的第二个版本RVM HOME / .rvm / usr / lib(如果是系统安装,则为/ usr / local / rvm / usr / lib)。您可以通过临时重命名$ HOME / .rvm / usr / lib并查看“ gem install pg”是否有效来进行验证。

要解决此问题,请使用系统OpenSSL库重建rvm(您可能需要从rvm / usr / lib目录中手动删除libssl。*和libcrypto。*):

rvm reinstall 1.9.3 --with-openssl-dir=/usr

这终于在Ubunto 12.04上为我解决了问题。


感谢您的回答!Ubuntu越新,Ruby越老,OpenSSL不匹配的可能性就越大。
mikeycgto

除此之外,没有其他工作!非常感谢@ mike-blackwell。在您进行救援之前,我几乎已经放弃了希望。
varagrawal


5

在这里的每个建议都失败之后,这为我在Ubuntu 12.04上解决了问题。

rvmsudo gem install pg -v '0.12.2' -- --with-pg-lib=/usr/include/postgresql

我的解决方案几乎相同。我正在使用rbenv,对我有用的是:`gem install pg---with-pg-lib = / usr / lib / postgresql / --with-pg-include = / usr / include / postgresql /`; 我不需要指定版本。
Dan Tenenbaum

3

我试图在新安装的Ubuntu 16.04中设置Rails项目。我在运行捆绑软件时遇到了同样的问题。跑步

sudo apt-get install aptitude

其次是

sudo apt-get install libpq-dev

为我解决了。


3

对于在尝试了此页面上的所有答案后仍然遇到问题的任何人,以下各项(最终)有效:

sudo apt-get install libgmp3-dev
gem install pg

这是之后完成此页面上提到的所有其他操作。

PostgreSQL 9.5.8
Ubuntu 16.10


这就是我在Ubuntu 18.04
Weston Ganger 18年

1

我遇到了同样的问题,并尝试了许多不同的变体。经过一番尝试后,我变得可以了sudo gem install,但是在没有sudo的情况下安装仍然有问题。
最终,我发现了一个决定因素-重新安装rvm帮助了我。可能可以节省其他人的时间。


1

解决此问题的另一种方法是使用Homebrew / linuxbrew安装PostgreSQL:

brew install postgresql

作为一种习惯,除非有必要,否则我不喜欢使用sudo。


Homebrew仅适用于Mac。
IIllIIll,2013年

2
有一个Linux分支。
echristopherson'2

如果您不想安装完整的PostgreSQL,以下对我brew install libpq && brew link libpq --force
Andrew

1

对于那些试图安装Redmine的人,我错过了 sudo apt-get install ruby-all-dev在尝试了以上所有内容后了。

初始错误为mkmf.rb can't find header files for ruby at /usr/lib/ruby/include/ruby.h



0

另一个选择是使用可在Linux和macOS上运行的Homebrew仅安装支持库:

brew install libpq

然后

brew link libpq --force

(该--force选项是必需的,因为它与postgres公式冲突。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.