Domanda

Ho ruby ​​1.8.7 (compilazione nativa), rails 2.3.4, OSX 10.6.2 e anche sqlite3-ruby.

L'errore che ricevo quando accedo all'app rails è

NomeErrore:costante non inizializzata SQLite3::Driver::Native::Driver::API

Storia:
Sono passato a Snow Leopard migrando le mie app con un cavo FW dal mio vecchio MacBook a quello nuovo.Tutto ha funzionato perfettamente per mesi, ma ieri ho dovuto installare watir, che dipendeva da rb-appscript, che non è stato creato a causa di un errore di "architettura sbagliata" in libsqlite3.dylib.Ho pensato che la build fosse stata eseguita sulla vecchia macchina, quindi volevo ricostruire sqlite3-ruby:

$ sudo gem disinstalla sqlite3-ruby

$ sudo gem installa sqlite3-ruby

Creazione di estensioni native.Potrebbe volerci un po' di tempo...
ERRORE:Errore durante l'installazione di sqlite3-ruby:
ERRORE:Impossibile creare l'estensione nativa gem.

/usr/local/bin/ruby extconf.rb
controllando fdatasync() in -lrt...NO
controllo per sqlite3.h...SÌ
controllando sqlite3_open() in -lsqlite3...NO
* extconf.rb non riuscito *
Impossibile creare Makefile per qualche motivo, probabilmente per mancanza di
librerie e/o intestazioni necessarie.Controlla il file mkmf.log per ulteriori informazioni
dettagli.Potresti avere bisogno di opzioni di configurazione.

Sembra che le librerie sqlite3 non funzionino correttamente.Ho provato a installare macports sqlite3 (sudo port install sqlite3) e a usarlo invece, ma con lo stesso risultato...quindi ho ricostruito sqlite3 da zero..download->configura->make->make install.Dopodiché, la gemma ora si costruisce perfettamente, ma non funziona sui binari, dando l'errore all'inizio di questo articolo.

Non sono davvero sicuro di dove andare da qui perché ho provato quanto segue

  1. Ricostruisci sqlite3 dalla fonte più recente (http://www.sqlite.org/download.html)
  2. Reinstallato sqlite3-ruby (sudo gem uninstall sqlite3-ruby && sudo gem install sqlite3-ruby)
  3. Usato sqlite3 da macports (sudo port install sqlite3 && sudo gem install sqlite3-ruby)
  4. Rail reinstallati (sudo gem install rails sqlite3-ruby ) e ambiente aggiornato.rb su rails 2.3.5.

Inutile, ricevo ancora questo errore:

NomeErrore:costante non inizializzata SQLite3::Driver::Native::Driver::AP
da /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
aprire'
da /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in `initialize'

A proposito, ho Xcode installato dal CD di Snow Leopard.

Cosa posso fare per risolvere il problema?

È stato utile?

Soluzione 2

Grazie per le risposteEcco cosa ho fatto per risolvere il problema:

  1. Reinstallazione completa di ruby1.8.7 su /usr/local, vedere qui: http://hivelogic.com/articles/ruby-rails-leopard

    Nota:readline non funzionava durante la ricompilazione di Ruby sul mio Mac, quindi ho dovuto creare anche quello da zero e assicurarmi di aggiungere l'opzione --with-readline-dir per configurare:

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

  2. Reinstallazione completa di sqlite3 in /usr/local

  3. Ricostruisci tutti i gem sul sistema con sudo gem install XXX, incluso sqlite3-ruby.Questo è necessario solo con gemme specifiche della piattaforma, ma ho trovato che fosse più veloce semplicemente installare tutto in un oneliner:

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

Ho provato ad utilizzare ruby1.9 ma tutto ha smesso di funzionare a causa di dipendenze interrotte in gem e plugin, quindi non consiglierei di passare alla 1.9 a meno che tu non sia pronto per un debug pesante e sappia come ripristinare il tuo vecchio sistema!

Finalmente tutto è di nuovo funzionante!

Altri suggerimenti

Il mio problema era leggermente diverso e in effetti nessuna delle soluzioni che ho trovato online ha funzionato.

Quando provo a installare sqlite3-ruby dopo l'aggiornamento alla versione di prova di Snow Leopard e XCode 4.0, ricevo il messaggio

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'

tuttavia è stato installato sqlite3 e anche la reinstallazione non ha aiutato.Avevo già avuto problemi con le versioni a 64 bit e universali, ma avevo risolto anche quello.In effetti, potrei lavorare con sqlite3.

Quindi gem install dovrebbe anche dirti qualcosa in questo senso:

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

Quindi cd a quella directory e lì cerca ExtConf.rb, il mio era in ./ext/sqlite3/extconf.rb ho scoperto che Ruby stava verificando la libreria SQLite3 utilizzando

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

Quindi ho avviato irb e ho controllato perché non funzionava:

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

Bene, in effetti funziona e il mio rubino trova la biblioteca.Allora perché non funziona dalla configurazione?L'ispezione approfondita di extconf.rb ha mostrato la seguente riga:

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

Quando lo eseguo in irb:

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

Sorprendentemente non troverò più la biblioteca.In effetti non capisco come possa essere, ma è quello che succede.

Quindi questa è la cura:commentare la riga

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

in extconf.rb

Quindi da /Library/Ruby/Gems/1.8/gems/sqlite3-ruby-1.3.1 ho rilasciato

 sudo ruby ./setup.rb

Ciò è andato a buon fine senza problemi (ho provato prima di commentare la riga sqlite= e non ha funzionato)

Riavviata l'applicazione Ruby che presentava problemi con sqlite.Funziona bene.

Spero che questo possa aiutare qualcuno.

Gelato

Ho trovato alcune indicazioni al riguardo sul blog di Don Park all'indirizzo:

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

La sua soluzione rimanda a Stack Overflow nel seguente thread:

Leopardo delle nevi, sqlite3-rubino

La risposta al comando ln sembra aver risolto il mio problema.Spero che aiuti anche te.

Se il gem non si costruisce non è perché devi necessariamente ricostruire sqlite3 dai sorgenti, ma per costruire il gem avrai bisogno delle librerie per sviluppatori sqlite3.

Sulla maggior parte dei sistemi Linux/Unix puoi installarli eseguendo "sudo apt-get install sqlite3-dev", tuttavia non sono sicuro di come funzioni con Macports, ma assicurati di avere quel pacchetto.Devi assicurarti che siano nel tuo percorso o passare la directory in cui si trovano quando installi il gem (vedi l'output del gem per suggerimenti sulle opzioni per farlo).

Ho sqlite3 in esecuzione sul mio Mac senza problemi, sia con la versione 1.8.7 che ora con la versione aggiornata 1.9.1 Ruby.Potresti voler assicurarti di avere installato anche gli strumenti per sviluppatori XCode.

Per quelli che utilizzano Snow Leopard 64 e hanno riscontrato questo problema, l'installazione di questo macport ha risolto il problema per me.

sudo port install rb-sqlite3 +universal
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top