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/bin
sudo 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
в компиляции. Один разpg
gem скомпилирован, пути связаны навсегда. Итак, переустановка перекомпилирует и перелинковывает пути к новым библиотекам.
В аналогичном ответе от stackru предлагалось удалить Postgres.app из PATH, удалить гем pg и снова установить гем pg.
(Я не трачу время, чтобы тщательно проверить, относится ли это к этой проблеме, но это решило проблему, с которой я столкнулся, и я хочу распространить это решение, так как мне было трудно его найти.)