не могу установить pg gem, проверка PQconnectdb() в -lpq нет

Я пытаюсь разрабатывать в Ruby on Rails, используя PostgreSQL локально, поэтому я пытаюсь установить гем pg. На Убунту 12.04. В терминале я набрал:

gem install pg -v '0.12.2'

Что выдает следующую ошибку:

Building native extensions.  This could take a while...
ERROR:  Error installing pg:
    ERROR: Failed to build gem native extension.

        /home/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.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
    --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/troyshu/.rvm/rubies/ruby-1.9.3-p194/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 /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1 for inspection.
Results logged to /home/troyshu/.rvm/gems/ruby-1.9.3-p194/gems/pg-0.14.1/ext/gem_make.out

Интересно, что добавление sudo к команде работает:

$ sudo gem install pg -v '0.12.2'
Building native extensions.  This could take a while...
Successfully installed pg-0.12.2
1 gem installed

Кстати, мне пришлось запустить «sudo apt-get install ruby1.9.1-dev», чтобы вышеуказанная команда заработала. Но я все еще не могу заниматься разработкой, потому что «установка пакета» не будет работать (и постоянно говорит мне запустить «gem install pg -v '0.12.2')

У меня такое ощущение, что "gem install pg" спотыкается на

checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no

но, как полный нуб в Ubuntu и RoR, я понятия не имею, почему. Может быть, мои поисковые навыки тоже хромают, потому что я не смог найти решение для своего конкретного случая. Надеюсь есть исправление?

Спасибо!


person troyshu    schedule 21.09.2012    source источник
comment
Вы уверены, что libpq-dev установлен? Я опубликовал ответ, который объясняет, как это сделать.   -  person Colin R    schedule 22.09.2012
comment
Какие версии PostgreSQL и libpq-dev у вас установлены?   -  person Colin R    schedule 23.09.2012
comment
Поэтому я просто настроил коробку Ubuntu 12.04 Vagrant и выполнил следующие команды от имени пользователя без полномочий root: $ sudo apt-get update, $ sudo apt-get install postgresql libpq-dev build-essentials git-core curl, $ curl -L https://get.rvm.io | bash -s stable --ruby и $ gem install pg -v 0.12.2` без ошибок (также я установил последнюю версию pg gem, v0. 14.1 без ошибок; возможно, вы захотите посмотреть, сможете ли вы использовать новейшую версию, но не обязательно, что она решит вашу проблему).   -  person Colin R    schedule 23.09.2012
comment
Вы пытались удалить и переустановить Postgres и libpq-dev? $ sudo apt-get autoremove postgresql libpq-dev если вы установили с помощью apt. Пока вы этим занимаетесь, вам следует подумать об использовании последней версии Postgres: $ sudo add-apt-repository ppa:pitti/postgresql, $ sudo apt-get update, $ sudo apt-get install postgresql libpq-dev. Примечание. Все это предполагает, что вы не являетесь пользователем root   -  person Colin R    schedule 23.09.2012


Ответы (7)



Судя по опубликованному вами сообщению об ошибке, у вас не установлено libpq-dev. Попробуйте apt-get install libpq-devsudo, если вы не root), а затем установите гем.

Поскольку вы используете RVM, если вам когда-либо придется использовать sudo для установки драгоценного камня, вы делаете это неправильно. sudo устанавливает гем для использования системного Ruby, а не Ruby, который вы установили с помощью RVM.

person Colin R    schedule 22.09.2012
comment
Прохладный. Я думаю, что я запускал команду раньше. Я получаю libpq-dev is already the newest version. Я также получаю кучу других выходных данных, не уверен, что они актуальны: The following packages were automatically installed and are no longer required: libsdl-ttf2.0-0 libboost-filesystem1.46.1 python-numpy python-pygame deluge-gtk libsdl-mixer1.2 libboost-system1.46.1 libboost-python1.46.1 python-libtorrent libportmidi0 deluge-common libmikmod2 libboost-thread1.46.1 libtorrent-rasterbar6 libsmpeg0 Все еще получаю ту же ошибку после запуска gem install pg -v '0.12.2' :( - person troyshu; 23.09.2012
comment
Да, установил. Нет разницы. - person JosephK; 13.02.2018

Я нашел странное решение, но оно сработало для меня вместо всех других предложений:

mv ~/.rvm/usr/lib ~/.rvm/usr/lib_rvm 
person Pavel Strakhov    schedule 11.03.2013

если sudo работает, а стандартный пользователь нет, это говорит либо о том, что он находит какой-то набор библиотек и файлов заголовков где-то, которые не найдены другим пользователем, либо о том, что на самом деле существует проблема с разрешениями, которая не обрабатывается должным образом где-то еще. Вероятно, вы могли бы использовать strace, чтобы найти корень проблемы, если хотите.

Тем не менее, я думаю, что более разумное решение состоит в том, чтобы признать, что вам, вероятно, нужен root-доступ для установки многих подобных вещей, и поэтому, если бы это была моя система, я бы с ней смирился.

person Chris Travers    schedule 30.09.2012

У меня была аналогичная проблема с неудачным bundle install:

Installing pg 0.17.1 with native extensions

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

...

An error occurred while installing pg (0.17.1), and Bundler cannot continue.
Make sure that `gem install pg -v '0.17.1'` succeeds before bundling.

но с gem install pg -v '0.17.1'.

Я мог бы успешно установить драгоценный камень, но пакет все равно не работал бы.

Я исправил это, изменив конфигурации пакета pg:

  1. Проверьте конфиги pg:

    $ which pg_config возвращает:

    /usr/local/bin/pg_config

  2. Проверьте текущие параметры сборки пакета для pg

$ bundle config build.pg

  1. Если не значение, возвращаемое which pg_config,

$ bundle config build.pg --with-pg-config=/usr/local/bin/pg_config

Теперь попробуй bundle install!!!!

person Brian Hedberg    schedule 10.10.2015

Для меня единственное, что сработало, это установка rvm с помощью инструкций на веб-сайте rvm: https://rvm.io. Мне удалось заставить его работать на Ubuntu 14.04.

Полный список команд на эту дату:
sudo gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

Убедитесь, что вы находитесь в загружаемом каталоге, затем запустите:
\curl -sSL https://get.rvm.io | bash -s stable

person jamescampbell    schedule 05.09.2017

Когда вы делаете sudo gem install pg, gem устанавливается везде, где установлены ruby ​​и postgresql; когда вы делаете gem install pg, гем устанавливается в ваш домашний каталог (см. ваши сообщения!). Итак, вам нужно сделать sudo bundle install blah-blah-blah для всех ваших драгоценных камней, учитывая то, как вы работаете локально. Есть, конечно, и другие варианты, вроде RVM, которыми я не пользуюсь.

person thisfeller    schedule 21.09.2012
comment
Спасибо, каждый день узнаю что-то новое. Я немного смущен, хотя. Ruby установлен в моем домашнем каталоге: which ruby возвращает /home/troyshu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby. Итак, является ли bundle install правильной командой для запуска (которая не работает из-за ошибки в моем исходном сообщении)? - person troyshu; 21.09.2012
comment
Ах, вы используете rvm. Это прекрасно! Многие находят это полезным. На веб-сайте rvm есть полная страница документа, которая объясняет, как делать то, что вы пытаетесь сделать. Вы хотите что-то вроде rvm exec gem install blah или что-то в этом роде. - person thisfeller; 21.09.2012
comment
Ok. Я попробовал rvm 1.9.3 do gem install pg -v '0.12.2', но он выдает ту же ошибку, что и в моем исходном сообщении. Я подумал, что это может быть ошибка версии pg, поэтому я попробовал только rvm 1.9.3 do gem install pg, что дало ту же ошибку. - person troyshu; 21.09.2012
comment
Чтобы установить гем с помощью RVM, достаточно простого gem install .... Все остальное обычно означает, что вы делаете это неправильно. - person Colin R; 22.09.2012
comment
Только если postgresql установлен там, где его может найти gem. - person thisfeller; 22.09.2012