5 Stimmen

Fehler beim Anfordern von pg unter rvm mit postgres.app

Ich verwende Postgres.app auf OS X (10.8.3). Ich habe meinen PATH so geändert, dass der bin-Ordner für die App vor allen anderen steht.

Rammy:~ phrogz$ which pg_config
/Applications/Postgres.app/Contents/MacOS/bin/pg_config

Ich habe rvm installiert und kann das pg gem ohne Fehler installieren, aber wenn ich es benötige, erhalte ich einen Fehler:

Rammy:~ phrogz$ gem -v
1.8.25

Rammy:~ phrogz$ gem install pg
Fetching: pg-0.15.1.gem (100%)
Building native extensions.  This could take a while...
Successfully installed pg-0.15.1
1 gem installed

Rammy:~ phrogz$ ruby -v -e "require 'pg'"
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]
/Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': dlopen(/Users/phrogz/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.15.1/lib/pg_ext.bundle, 9): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib (LoadError)
  Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib
  Reason: image not found - /Users/phrogz/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.15.1/lib/pg_ext.bundle
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /Users/phrogz/.rvm/gems/ruby-1.9.3-p392/gems/pg-0.15.1/lib/pg.rb:4:in `'
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `require'
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require'
    from /Users/phrogz/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:35:in `require'
    from -e:1:in `

Was muss ich tun, um das pg gem ordnungsgemäß zu installieren?

4voto

Phrogz Punkte 283167

Bearbeiten: Obwohl diese Antwort derzeit mehr Stimmen hat als die akzeptierte Antwort, ist die akzeptierte Antwort weit einfacher und sauberer.


Entfernen Sie die Postgres.app-Binärdateien aus dem Pfad beim Installieren des pg-Gems und verwenden Sie stattdessen die in OS X integrierte Postgres-Installation, um das Gem zu konfigurieren. Die pg-Bibliothek wird später immer noch korrekt eine Verbindung zum Postgres.app-Server herstellen.

Rammy:~ phrogz$ gem uninstall pg
Erfolgreich pg-0.15.1 deinstalliert

# Passen Sie den PATH an, um /Applications/Postgres.app/Contents/MacOS/bin zu entfernen

Rammy:~ phrogz$ gem install pg
Abrufen: pg-0.15.1.gem (100%)
Native Erweiterungen werden erstellt. Dies könnte eine Weile dauern...
Erfolgreich pg-0.15.1 installiert
1 gem installiert

Rammy:~ phrogz$ ruby -v -e "require 'pg'"
ruby 1.9.3p392 (2013-02-22 Revision 39386) [x86_64-darwin12.3.0]

3voto

stephenalexbrowne Punkte 1191

Ich habe eine Lösung gefunden, die für mich funktioniert und nur minimales Hacken/Konfigurieren erfordert. Du musst dies nur einmal tun und es wird bei jeder Bundle-Installation funktionieren. Füge Folgendes zu deiner .bash_profile, .bash_rc oder äquivalentem hinzu:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

(Vorausgesetzt, du hast Postgres.app am Standardort installiert). Starte dann deine Terminalsitzung neu und versuche es erneut.

Direktes Exportieren nach DYLD_LIBRARY_PATH kann ernste Probleme mit anderen Apps verursachen, die darauf angewiesen sind, aber wenn du den Fallback-Pfad verwendest, umgehst du diese Probleme.

Siehe auch:

EDIT: Es scheint, dass das Setzen von DYLD_FALLBACK_LIBRARY_PATH einen Fehler verursacht, wenn du versuchst, psql auszuführen. Um dies zu beheben, kannst du die folgenden zwei Zeilen zu deiner .bash_profile hinzufügen:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";

Das setzt voraus, dass du bash verwendest und dass deine .bash_profile sich in deinem Home-Verzeichnis befindet. Wenn das nicht der Fall ist (oder wenn du eine .bashrc oder eine andere Umgebungseinrichtung anstelle von .bash_profile verwendest), ändere den ~/.bash_profile Teil des Befehls in den Pfad zu deinem Umgebungseinrichtungsskript.

Die aliased Befehle starten im Grunde eine Unter-Shell, die deine aktuelle bash-Umgebung nicht beeinflusst. Wenn es also die DYLD_FALLBACK_LIBRARY_PATH Variable aufhebt, ist es nur temporär. Nachdem du psql beendet hast, wird die Umgebungsvariable wieder gesetzt, damit Rails ordnungsgemäß funktioniert.

1voto

Gerwin Brunner Punkte 186

Das Problem besteht im Verknüpfen des Gems mit der Postgres.app. Wenn Sie es mit der postgres-Version verknüpfen, die mit osx geliefert wird

Hier ist ein kleines Skript:

  • wenn Sie rvm mit Projekt-Gemsets verwenden: wechseln Sie in Ihr Projekt

  • führen Sie die folgenden Befehle aus:

    gem uninstall pg
    
    PATH=${PATH/'Postgres.app'/'WRONGFOLDER.app'}
    gem install pg
    PATH=${PATH/'WRONGFOLDER.app'/'Postgres.app'}
  • Jetzt sollte alles in Ordnung sein

1voto

Evolve Punkte 8673

Dies hat bei mir funktioniert:

sudo env ARCHFLAGS="-arch x86_64" gem install pg -- --with-pg-config=/Applications/Postgres93.app/Contents/MacOS/bin/pg_config

Stellen Sie sicher, dass der Pfad /Applications/Postgres93.app.. bei Ihnen existiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X