Frage

Ich habe Ruby 1.8.7 (nativ kompiliert), Rails 2.3.4, OSX 10.6.2 und auch sqlite3-ruby.

Der Fehler, den ich beim Zugriff auf die Rails-App erhalte, ist

Namensfehler:nicht initialisierte Konstante SQLite3::Driver::Native::Driver::API

Geschichte:
Ich habe ein Upgrade auf Snow Leopard durchgeführt, indem ich meine Apps mit einem FW-Kabel von meinem alten MacBook auf das neue migriert habe.Monatelang lief alles perfekt, aber gestern musste ich Watir installieren, das von rb-appscript abhängig war, das aufgrund eines Fehlers „falsche Architektur“ in libsqlite3.dylib nicht erstellt werden konnte.Ich ging davon aus, dass der Build auf der alten Maschine erstellt wurde, also wollte ich sqlite3-ruby neu erstellen:

$ sudo gem deinstalliert sqlite3-ruby

$ sudo gem installiere sqlite3-ruby

Erstellen nativer Erweiterungen.Das kann eine Weile dauern...
FEHLER:Fehler bei der Installation von sqlite3-ruby:
FEHLER:Die native Gem-Erweiterung konnte nicht erstellt werden.

/usr/local/bin/ruby extconf.rb
Suche nach fdatasync() in -lrt...NEIN
Suche nach sqlite3.h...Ja
Suche nach sqlite3_open() in -lsqlite3...NEIN
* extconf.rb fehlgeschlagen *
Makefile konnte aus irgendeinem Grund nicht erstellt werden, wahrscheinlich aus Mangel
notwendige Bibliotheken und/oder Header.Weitere Informationen finden Sie in der Datei mkmf.log
Einzelheiten.Möglicherweise benötigen Sie Konfigurationsoptionen.

Es scheint, als ob die SQLite3-Bibliotheken nicht richtig funktionieren.Ich habe versucht, macports sqlite3 (sudo port install sqlite3) zu installieren und stattdessen das zu verwenden, aber mit dem gleichen Ergebnis ...Also baue ich SQLite3 von Grund auf neu.download->configure->make->make install.Danach wird der Edelstein nun perfekt erstellt, funktioniert jedoch nicht in Schienen, was zu dem Fehler oben in diesem Artikel führt.

Ich bin mir nicht wirklich sicher, wohin ich von hier aus gehen soll, da ich Folgendes versucht habe

  1. Erstellen Sie SQLite3 aus der neuesten Quelle neu (http://www.sqlite.org/download.html)
  2. sqlite3-ruby neu installiert (sudo gem uninstall sqlite3-ruby && sudo gem install sqlite3-ruby)
  3. Benutzte sqlite3 von macports (sudo port install sqlite3 && sudo gem install sqlite3-ruby)
  4. Rails neu installiert (sudo gem install Rails sqlite3-ruby ) und Environment.rb auf Rails 2.3.5 aktualisiert.

Kein Erfolg, ich erhalte immer noch diese Fehlermeldung:

Namensfehler:nicht initialisierte Konstante SQLite3::Driver::Native::Driver::AP
aus /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:in const_missing'
from /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/driver/native/driver.rb:76:in
offen'
aus /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in `initialize'

Übrigens habe ich Xcode von der Snow Leopard-CD installiert.

Was kann ich tun, um das Problem zu lösen?

War es hilfreich?

Lösung 2

Danke für die Antworten.Folgendes habe ich getan, um das Problem zu lösen:

  1. Komplette Neuinstallation von Ruby1.8.7 nach /usr/local, siehe hier: http://hivelogic.com/articles/ruby-rails-leopard

    Notiz:readline funktionierte beim Neukompilieren von Ruby auf meinem Mac nicht, also musste ich es auch von Grund auf neu erstellen und sicherstellen, dass ich die Option --with-readline-dir zur Konfiguration hinzufüge:

    ./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1 --prefix=/usr/local --with-readline-dir=/usr/local

  2. Komplette Neuinstallation von sqlite3 nach /usr/local

  3. Erstellen Sie mit sudo gem install XXX alle Gems auf dem System neu, einschließlich sqlite3-ruby.Dies ist nur bei plattformspezifischen Gems erforderlich, aber ich fand, dass es schneller ist, einfach alles in einem Oneliner zu installieren:

    sudo gem install gem1 gem2 ...gemN --no-ri --no-rdoc

Ich habe versucht, Ruby 1.9 zu verwenden, aber aufgrund defekter Abhängigkeiten in Gems und Plugins funktionierte alles nicht mehr. Daher würde ich den Wechsel zu 1.9 nicht empfehlen, es sei denn, Sie haben Lust auf umfangreiches Debuggen und wissen, wie Sie Ihr altes System wiederherstellen können!

Endlich läuft wieder alles!

Andere Tipps

Mein Problem war etwas anders und tatsächlich funktionierte keine der Lösungen, die ich online gefunden habe.

Als ich versuchte, sqlite3-ruby nach dem Upgrade auf Snow Leopard und die Testversion von XCode 4.0 zu installieren, erhielt ich die Meldung

checking for sqlite3.h... yes
checking for sqlite3_libversion_number() in -lsqlite3... no
sqlite3 is missing. Try 'port install sqlite3 +universal' or 'yum install sqlite3-devel'

allerdings wurde sqlite3 installiert und auch eine Neuinstallation hat nicht geholfen.Ich hatte das Problem bereits mit der 64-Bit- und der Universalversion, habe es aber auch behoben.Tatsächlich könnte ich mit sqlite3 arbeiten.

Gem Install sollte Ihnen also auch etwas in dieser Richtung sagen:

Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 for inspection.

Also cd in dieses Verzeichnis und dort suchen Sie nach extconf.rb, meine war in ./ext/sqlite3/extconf.rb Ich habe festgestellt, dass Ruby mit der sqlite3-Bibliothek nach der Bibliothek sqlite3 sucht

asplode('sqlite3') unless find_library 'sqlite3', 'sqlite3_libversion_number'

Also habe ich irb gestartet und überprüft, warum das nicht funktioniert hat:

  require 'mkmf'
   find_library 'sqlite3', 'sqlite3_libversion_number'

Nun, tatsächlich funktioniert das und mein Ruby findet die Bibliothek.Warum funktioniert es also nicht über das Setup?Eine genaue Untersuchung von extconf.rb ergab die folgende Zeile:

  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

Wenn ich das in irb ausführe:

require 'mkmf'
  sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr']) 
  find_library 'sqlite3', 'sqlite3_libversion_number'

Überraschenderweise werde ich die Bibliothek nicht mehr finden.Tatsächlich verstehe ich nicht, wie das sein kann, aber genau das passiert.

Das ist also das Heilmittel:Kommentieren Sie die Zeile aus

sqlite = dir_config('sqlite3', ['/usr/local', '/opt/local', '/usr'])

in extconf.rb

Dann habe ich von /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 ausgegeben

 sudo ruby ./setup.rb

Dies verlief ohne Probleme (ich habe es versucht, bevor ich die Zeile „sqlite=“ auskommentiert habe, aber es hat nicht funktioniert).

Habe die Ruby-Anwendung neu gestartet, bei der es Probleme mit SQLite gab.Funktioniert gut.

Ich hoffe, das hilft jemandem.

Eiscreme

Eine Anleitung dazu habe ich im Blog von Don Park gefunden:

http://blog.docuverse.com/2009/09/24/installing-sqlite3-ruby-gem-on-snow-leopard/

Seine Lösung verweist direkt auf Stack Overflow im folgenden Thread:

Schneeleopard, sqlite3-ruby

Die Antwort zum ln-Befehl scheint mein Problem gelöst zu haben.Ich hoffe, es hilft dir auch.

Wenn das Gem nicht erstellt wird, liegt das nicht daran, dass Sie sqlite3 unbedingt aus dem Quellcode neu erstellen müssen, sondern dass Sie zum Erstellen des Gems die sqlite3-Entwicklerbibliotheken benötigen.

Auf den meisten Linux-/Unix-Systemen können Sie sie installieren, indem Sie „sudo apt-get install sqlite3-dev“ ausführen. Ich bin mir jedoch nicht sicher, wie es mit Macports funktioniert – stellen Sie aber sicher, dass Sie über dieses Paket verfügen.Sie müssen sicherstellen, dass sie sich in Ihrem Pfad befinden, oder das Verzeichnis übergeben, in dem sie sich befinden, wenn Sie das Gem installieren (Hinweise zu den Optionen dafür finden Sie in der Ausgabe des Gems).

Auf meinem Mac läuft sqlite3 einwandfrei, sowohl mit 1.8.7 als auch jetzt mit meinem aktualisierten 1.9.1 Ruby.Möglicherweise möchten Sie sicherstellen, dass auch die XCode Developer Tools installiert sind.

Für diejenigen, die Snow Leopard 64 verwenden und dieses Problem haben, hat die Installation dieses Mac-Ports das Problem für mich behoben.

sudo port install rb-sqlite3 +universal
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top