Rails 3 - не вдається встановити pg gem


98

Коли я намагаюся запустити пакет (встановити пакет), я весь час отримую

Installing pg (0.13.2) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /Users/ryan/.rvm/rubies/ruby-1.9.2-p290/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=/Users/ryan/.rvm/rubies/ruby-1.9.2-p290/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 /Users/ryan/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.13.2 for inspection.
Results logged to /Users/ryan/.rvm/gems/ruby-1.9.2-p290/gems/pg-0.13.2/ext/gem_make.out
An error occured while installing pg (0.13.2), and Bundler cannot continue.
Make sure that `gem install pg -v '0.13.2'` succeeds before bundling.

Я використовую Mac OS X 10.6, версія встановленого PostgreSQL - 9.1. Я виявив, що проблема в libpq-dev , як я можу це встановити / виправити?


2
як ви встановили postgres на своєму mac?
— шингара

1
таким чином
— user984621

інсталятор on_click? Флінк? чи MacPort?
— shingara

Я намагався встановити це таким чином:, sudo port install libpq-devале ще одна проблема - Error: Port libpq-dev not found To report a bug, see <http://guide.macports.org/#project.tickets>. Це жахливо, все ж деякі проблеми ...
— user984621

1
Дивіться це питання: [тут] [1] [1]: stackoverflow.com/questions/10321189 / ...
— banditKing

Відповіді:


78

Як зазначено у вашому журналі реєстрації помилок, вам потрібно пройти шлях до pg_config. Спробуйте встановити самоцвіт за допомогою:

gem install pg -- --with-pg-config= 'PATH_TO_YOUR_PG_CONFIG'

Якщо ви не впевнені, де знаходиться ваш pg_config, і припускаючи, що ви перебуваєте на Linux або Mac, можете запустити таку команду:

which pg_config

Ваш pg-config може знаходитись у різних місцях залежно від способу встановлення postgres.


Як зауваження, двійковий пакет із сайту Postgres не містить заголовків розробки та pg_configпрограми.
— тадман

3
Бінарний пакет звідси: enterprisedb.com/products-services-training/pgdownload#osx , безумовно , робить містити як pg_config(наприклад, в /Library/PostgreSQL/9.1/bin/pg_configпротягом 9.1.x) і заголовки розвитку. Це те, що я використовую для тестування pgдорогоцінного каміння в розвитку.
— Майкл Грейнджер

8
Не which pg_configбуло б швидше, ніж find / -name pg_config?
— Джастін Д.

Зробив незначне налаштування аргументів вашого командного рядка. Заміна версії на поточну повинна працювати нормально. Ось мій командний рядок: sudo env ARCHFLAGS = "- arch x86_64" gem install pg - --with-pg-include = / Бібліотека / PostgreSQL / 9.1 / include / --with-pg-lib = / Бібліотека / PostgreSQL / 9.1 / lib /
— Rod Paddock

13
На OSX ви також можете використовувати brew, щоб отримати заголовки, brew install libpqxxі все піде нормально.
— Вецин

99

якщо ви працюєте на Linux, можливо, вам буде цікаво, що для мене працювало:

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

Тоді

gem install pg

тоді

bundle install

src: http://wikimatze.de/installing-postgresql-gem-under-ubuntu-and-mac


1
дякую, як це в моєму випадку - не потрібно запускати пакет gem install pg
— valk

21
Не підходить для OS X.
— dfrankow

1
Працював для мене з листопада 2013 року під управлінням Ubuntu 13.04!
— Старкерс

чому це має стільки обновлених результатів, коли це явно для неправильної ОС?
— sevenseacat

1
@sevenseacat в ньому чітко зазначено ОС, на якій вона повинна бути використана. І очевидно, що багато людей з ОС Linux знаходять цю відповідь, коли досліджують цю проблему.
— EE33

57

Якщо ви використовуєте Postgress.app, тоді ви хочете отримати доступ до його інструментів командного рядка . Введіть наступний рядок у своєму терміналі чи у своєму PATH-профілі :

 PATH="/Applications/Postgres.app/Contents/MacOS/bin:$PATH"

gem install pgтепер має працювати. (Це те, що працювало для мене.)

Примітка Шлях нових версій виглядає так:

/Applications/Postgres.app/Contents/Versions/<version>/bin

3
Дуже дякую! Я провів півгодини, переглядаючи речі, які не спрацювали, і нарешті знайшов це закопаним тут. : D
— Пітер Браун

1
Прекрасне рішення, яке не вимагає заварювання.
— lucian303

7
Тільки майте на увазі, що патч Postgre.app змінився у версії 93. це зараз: /Applications/Postgres93.app/Contents/MacOS/bin
— Ален

2
Це працювало для мене, хоча мій контейнер знаходився в зовсім іншому місці -> /Library/PostgreSQL/9.3/bin
— Ієремія,

5
Це зараз - /Applications/Postgres.app/Contents/Versions/9.3/binстаном на 9.3.5, якщо ви використовуєте Postgres.app
— Ешлі


12

Шукати libpq:

brew search libpq

Потрібно вивести libpqxx

Потім спробуйте встановити його:

brew install libpqxx

8

Вам потрібно лише встановити libpq-dev:

sudo apt-get install libpq-dev

Тоді самоцвіт повинен встановити просто чудово.


8
Не підходить для OS X.
— dfrankow

У моєму випадку тільки це допомогло. Дякую!
— kovpack

7

Дотримуйтесь інструкцій після встановлення: http://postgresapp.com/documentation/configuration-ruby.html

Щоб встановити дорогоцінний камінь, переконайтесь, що ви правильно встановили $ PATH (як зазначено в http://postgresapp.com/documentation/cli-tools.html ), а потім запустіть

sudo ARCHFLAGS="-arch x86_64" gem install pg

Я настійно рекомендую прочитати обидві сторінки. Тільки скував їх і втратив 1 годину свого життя. Прочитайте їх, проблему вирішено.


Працює на OSX 10.9.5, за замовчуванням ruby ​​версія 2.0, rbenv локальна версія 1.9.3.
— jlucasps

Працює на OSX 10.11 ДЯКУЄТЬСЯ
— Ярін

Працює на OSX 10.11.4. Дякую!!
— Мартін Чемберлін

3

Проблема в мене полягала в тому, що вона чомусь намагалася компілювати з /usr/bin/gcc-4.2. Я з’ясував це, змінивши try_cpp в mkmf.rb (який я бачив у сліді стека), щоб створити виняток із збіжної лінії компіляції.

Я зв'язав програмне забезпечення gcc до gcc-4.2, і він працював:

sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

Чому намагалися використовувати gcc-4.2? Не маю уявлення.

Фактичний рядок компіляції:

/usr/bin/gcc-4.2 -E -I/Users/dfrankow/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/x86_64-darwin11.4.0 -I/Users/dfrankow/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1/ruby/backward -I/Users/dfrankow/.rvm/rubies/ruby-1.9.3-p125/include/ruby-1.9.1 -I. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -I/usr/local/Cellar/postgresql/9.1.4/include  -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration  -fno-common -pipe  conftest.c -o conftest.i (RuntimeError)

3

У мене вийшов той самий випуск, але мій Postgres був встановлений

/Library/PostgreSQL/9.3

Оновіть ~ / .bash_profile, додавши:

export PATH=/Library/PostgreSQL/9.3/bin:$PATH

Відкрийте новий термінал, запустіть bundle updateі також він працював для мене. Дякую Арі.


але для мене потрібно перевірити версію, а потім експортувати PATH = / Applications / Postgres.app / Зміст / Версії / 9.4 / bin: $ PATH
— Prateep Kul

1

Ви можете встановити параметр конфігурації збірки bundle config build.pg --with-pg-config=/Applications/Postgres.app/Contents/Versions/9.3/bin/pg_configта використовувати gem install pgбез будь-яких варіантів (шлях до pg_config може відрізнятися для вас, цей - для Postgresapp 9.3.5.0)


1

У мене була така ж проблема в моїй машині openSUSE13.1 KDE. До цього питання, з яким я стикався, я встановив лише пакети postgresqlта postgresql-serverвикористовував zypperкоманду. Потім знову встановлено ще 2 пакети:

[arup@to_do_app]$ sudo zypper in postgresql-devel postgresql-contrib
root's password:
Loading repository data...
Reading installed packages...
Resolving package dependencies...
#....

Потім я знову побіг bundle install, і успіх !!!



0

По-перше, видаліть будь-які версії Homebrew. Опція --force дозволяє видалити всі версії.

brew rm postgresql --force

Змініть шляхи відповідно до своєї версії.

sudo /sbin/SystemStarter stop postgresql-8.4
sudo rm -rf /Applications/PostgreSQL\ 8.4
sudo rm -rf /etc/postgres-reg.ini
sudo rm -rf /Library/StartupItems/postgresql-8.4
sudo rm -rf /Library/PostgreSQL/8.4
sudo dscl . delete /users/postgres

Відредагуйте / etc / profile та видаліть будь-які рядки, на які посилається "postgres".

nano /etc/profile

Встановіть PostgresSQL

brew update
brew install postgresql

Встановити PG GEM

gem install pg

Це воно. З повагою


0

Спочатку ви можете перевірити, чи є у вас термінал postrgresql у своєму терміналі, перейшовши до файлу lib. збирається cd ~ / opt / local / lib /, а потім наберіть ls та кнопку введення. Це покаже вам список усіх файлів, які знаходяться в каталозі lib.

1. Якщо у вас немає postreseql, ви можете завантажити через macports. порту sudo встановити postgresql93 @ 9.3.2_1

Тепер CD в свою папку, яку ви намагаєтеся встановити

  1. змусити ваш pg працювати з вашим файлом postgesql, який ви щойно завантажили, або встановив gem install pg - --with-pg-config = / opt / local / lib / postgresql93 / bin / pg_config

тепер запустіть встановити пакет



0

Те, що працювало для мене на El Capitan, було оновлення рубіну з системного замовчування до 2.3.1, здавалося, знаходити потрібні бібліотеки, які pgпотрібні дорогоцінній камені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.