Rails, Postgres: dyld: ленивая привязка символов не удалась: символ не найден: _PQresultMemorySize - PullRequest
1 голос
/ 21 января 2020

при создании нового rails-приложения (6.0.2) с postgres на ma c не удалось запустить его.

Получение этой ошибки при запуске приложения:

dyld: Symbol not found: _PQresultMemorySize
  Referenced from: /Users/dev/.rvm/gems/ruby-2.5.7/gems/pg-1.2.2/lib/pg_ext.bundle
  Expected in: /usr/lib/libpq.5.dylib

enter image description here

Это похоже на dyld: ленивая привязка символа не удалась: символ не найден: _PQresultMemorySize - Rails ,

а что делать?

Мои предыдущие приложения rails, на rails v6.0.1, также с тем же postgres gem 'pg', '>= 0.18', '< 2.0' работают просто отлично

Ответы [ 3 ]

4 голосов
/ 21 января 2020

PQresultMemorySize был введен в postgres 12, поскольку 1.2.0 pg gem проверяет, доступен ли он во время сборки расширения, и использует, если он есть (ранее этого не было). Так как он был доступен при сборке, и вы, вероятно, не понизили postgres или libpq сразу - это предполагает некоторый конфликт версий.

При установке из homebrew расположение будет /usr/local/lib/libpq.5.dylib, но у вас есть /usr/lib/libpq.5.dylib Похоже, у вас установлена ​​libpq из / и postgres> = 12 вместе с какой-то более старой версией.

Вам нужно найти, какие разные постгрессы / libpq вы установили, и удалить один из них, чтобы избавиться от конфликта. .

В качестве временного решения - вы можете установить требование к версии pg точно таким же, как и ваше уже работающее (смотрите Gemfile.lock другого приложения), так что будет использоваться уже установленный гем (и иметь более правильное расширение или просто быть версией, которая еще не пытается получить доступ к этой новой функции).

0 голосов
/ 28 марта 2020

Я нашел следующий обходной путь. Он жестко кодирует путь к общей библиотеке в pg_ext.bundle:

install_name_tool -change libpq.5.dylib /Library/PostgreSQL/12/lib/libpq.5.12.dylib pg_ext.bundle
0 голосов
/ 03 марта 2020

следующая попытка подвода:

$ gem install pg -- --with-pg-config=/Library/PostgreSQL/12/bin/pg_config в соответствии с github-pg

Fetching: pg-1.2.2.gem (100%)
Building native extensions with: '--with-pg-config=/Library/PostgreSQL/12/bin/pg_config'
This could take a while...
Successfully installed pg-1.2.2
Parsing documentation for pg-1.2.2
Installing ri documentation for pg-1.2.2
Done installing documentation for pg after 0 seconds
1 gem installed

Gemfile: gem 'pg', '~> 1.2.2'

тот же результат

pg ищет /usr/lib/libpq.5.dylib, и есть символическая ссылка, но она, кажется, указывает на более старую версию postgres.

для меня, кажется , что он должен искать /Library/PostgreSQL/12/lib/libpq.5.dylib

как научить драгоценный камень искать этот дилиб?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...