Ruby on Rails / PostgreSQL - ошибка библиотеки не загружается при запуске сервера

Heyo. Заранее извиняюсь, если на этот вопрос ответили в другой ветке. Я искал на сайте, но я не нашел ответа. Тем не менее, самой близкой проблемой была Ruby on Rails / PostgreSQL - ошибка "Библиотека не загружена" при запуске server- libq.5.dylib, но она так и не была решена, и ответ мне не помог.

Я пытаюсь запустить PostgreSQL на моем Mac OSX 10.6.8. У меня уже установлены Ruby 1.9.3p392 и Rails 3.2.13.

Поскольку у меня 10.6.8, а PostGresApp требуется 10.7+, я попытался установить PG с помощью ручного установщика (v9.2.3), доступного здесь: http://www.enterprisedb.com/products-services-training/pgdownload

Сначала я установил его в путь по умолчанию по адресу: /Library/PostgreSQL/9.2/. Затем я установил pg gem (PATH=$PATH:/Library/PostgreSQL/9.2/binsudo gem install pg). Когда я пытался rails s чтобы запустить мой localhost, я получил ошибку ниже.

После некоторого чтения я догадался, что это может быть ошибка пути, поэтому я удалил гем pg, а затем использовал программу удаления postgresql. Затем я переустановил pg в /users/stewartmccoy/Library/PostgreSQL/9.2/..., а затем переустановил гем pg. Но я все еще получаю ту же ошибку.

Любые мысли о том, как правильно установить PostgreSQL и запустить сервер rails?

stewart-mccoys-macbook:footy_subs stewartmccoy$ rails s
/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `require': dlopen(/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError)
  Referenced from: /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
  Reason: image not found - /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler.rb:132:in `require'
    from /Users/stewartmccoy/Code/footy_subs/config/application.rb:13:in `<top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `block in <top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `tap'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'
stewart-mccoys-macbook:footy_subs stewartmccoy$ gem uninstall pgSuccessfully uninstalled pg-0.14.1
stewart-mccoys-macbook:footy_subs stewartmccoy$ PATH=$PATH:/users/stewartmccoy/Library/PostgreSQL/9.2/bin sudo gem install pg
Password:
Fetching: pg-0.14.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed pg-0.14.1
1 gem installed
Installing ri documentation for pg-0.14.1...
Installing RDoc documentation for pg-0.14.1...
stewart-mccoys-macbook:footy_subs stewartmccoy$ rails s
/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `require': dlopen(/Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle, 9): Library not loaded: libpq.5.dylib (LoadError)
  Referenced from: /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
  Reason: image not found - /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg_ext.bundle
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.14.1/lib/pg.rb:4:in `<top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `each'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:70:in `block in require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `each'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler/runtime.rb:59:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392@global/gems/bundler-1.3.4/lib/bundler.rb:132:in `require'
    from /Users/stewartmccoy/Code/footy_subs/config/application.rb:13:in `<top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `require'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:53:in `block in <top (required)>'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `tap'
    from /Users/stewartmccoy/.rvm/gems/ruby-1.9.3-p392/gems/railties-3.2.13/lib/rails/commands.rb:50:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

3 ответа

Решение

Ключевая часть ошибки:

Library not loaded: libpq.5.dylib (LoadError)

Это говорит о том, что рубин не может найти libpq во время выполнения. Для решения этой проблемы вы, вероятно, должны установить DYLD_LIBRARY_PATH переменная среды, чтобы указать на lib каталог вашей установки PostgreSQL, либо глобально, либо в скрипте-обертке, который вы используете для запуска Rails. Посмотрите этот вопрос суперпользователя для получения дополнительной информации.

Pg gem может найти библиотеку во время компиляции и установки, потому что pg_config исполняемый файл находится на PATH и он использует это, чтобы найти libpq, Похоже, что он не хранит путь для использования во время выполнения, поэтому вы должны сами настроить динамический компоновщик времени выполнения.

Простой скрипт-обертка (на случай, если вы не хотите изменять свою глобальную среду) выглядит примерно так:

#!/bin/bash
export DYLD_LIBRARY_PATH=/path/to/pg/lib 
exec rails "$@"

"$@" В основном означает "передать все аргументы в этот скрипт, как если бы они были переданы здесь напрямую". Он сохраняет правильное цитирование и по сути означает, что команда rails не может сказать, что вы не запускали ее напрямую.

Я хотел поставить свои два цента здесь к ответам выше.

Иногда достаточно просто переустановить gem.

      gem uninstall pg && gem install pg

В моем случае я обновил сервер postgresql с9.6вплоть до14.xи пути dylib были изменены.

/opt/local/lib/postgresql96/libpq.5.dylib->/opt/local/lib/postgresql14/libpq.5.dylib

Драгоценный камень использует pg_config для определения путей к/opt/local/lib/postgresql[version]папка (имяPKGLIBDIR). Чтобы создать нативную библиотеку для гема, rake устанавливает пути к динамическим библиотекам, извлекая их изpg_configв компиляции. Один разpggem скомпилирован, пути связаны навсегда. Итак, переустановка перекомпилирует и перелинковывает пути к новым библиотекам.

В аналогичном ответе от stackru предлагалось удалить Postgres.app из PATH, удалить гем pg и снова установить гем pg.

(Я не трачу время, чтобы тщательно проверить, относится ли это к этой проблеме, но это решило проблему, с которой я столкнулся, и я хочу распространить это решение, так как мне было трудно его найти.)

Другие вопросы по тегам