Pergunta

Eu tenho Ruby 1.8.7 (compilado nativo), Rails 2.3.4, OSX 10.6.2 e também SQLITE3-RUBY.

O erro que estou recebendo ao acessar o aplicativo Rails é

NomeError: Constant Sqlite3 :: Driver :: Native :: Driver :: API

História:
Atualizei para o Snow Leopard migrando meus aplicativos com um Cable FW do meu antigo MacBook para o novo. Tudo estava funcionando perfeitamente por meses, mas ontem eu precisava instalar o Watir, que dependia do RB-Appscript, que não criou um erro de "arquitetura errada" no libsqlite3.dylib. Imaginei que a construção era feita na máquina antiga, então eu queria reconstruir o SQLITE3-RUBY:

$ sudo gem desinstall sqlite3-ruby

$ sudo gem install sqlite3-ruby

Construindo extensões nativas. Isso vai demorar um pouco...
Erro: Erro de instalação do SQLite3-Ruby:
Erro: falha ao criar uma extensão nativa do GEM.

/usr/local/bin/ruby extconf.rb
verificando fdatasync () em -lrt ... não
Verificando para sqlite3.h ... sim
Verificando para sqlite3_open () em -lsqlite3 ... não
* extconf.rb falhou *
Não poderia criar makefile devido a algum motivo, provavelmente falta de
bibliotecas necessárias e/ou cabeçalhos. Verifique o arquivo mkmf.log para mais
detalhes. Pode ser que você precise de opções de configuração.

Parece que o SQLITE3 LIBS não está funcionando corretamente. Eu tentei instalar o Macports SQLITE3 (SUDO Port Install SQLite3) e usá-lo, mas com o mesmo resultado ... então eu reconstruo o SQLITE3 do zero. Download-> Configure-> Make-> Make Install. Depois disso, a jóia agora constrói perfeitamente, mas não funciona em trilhos, dando o erro no topo deste artigo.

Não tenho muita certeza de onde ir daqui porque tentei o seguinte

  1. Reconstrua SQLite3 da fonte mais recente (http://www.sqlite.org/download.html)
  2. Reinstalado SQLITE3-RUBY (SUDO GEM UNINSTALL SQLITE3-RUBY && sudo gem install sqlite3-ruby)
  3. Usado SQLITE3 da Macports (instalação da porta sudo sqlite3 && sudo gem install sqlite3-ruby)
  4. Rails reinstalados (Sudo Gem Install Rails sqlite3-ruby) e Ambiental Ambients.rb to Rails 2.3.5.

Sem sucesso, ainda recebo este erro:

NomeError: constante não inicializado SQLITE3 :: Driver :: Native :: Driver :: AP
de /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
abrir'
de /usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.5/lib/sqlite3/database.rb:76:in `Initialize '

BTW, eu tenho o Xcode instalado no CD do Snow Leopard.

O que posso fazer para resolver o problema?

Foi útil?

Solução 2

Obrigado pelas respostas. Aqui está o que eu fiz para resolver o problema:

  1. Reinstalação completa de ruby1.8.7 para /usr /local, veja aqui: http://hivelogic.com/articles/ruby-rails-leopard

    Nota: O ReadLine não estava funcionando ao recompilar o Ruby no meu Mac, então eu tive que construí-lo também do zero e adicione a opção--com-line-dir para configurar:

    ./configure --enable shared --enable-pthread cflags = -d_xopen_source = 1--prefix =/usr/local ---with-leadline-dir =/usr/local

  2. Reinstalação completa do sqlite3 para /usr /local

  3. Reconstrua todas as gemas no sistema com o sudo gem Install XXX, incluindo SQLite3-Ruby. Isso é necessário apenas com gemas específicas da plataforma, mas achei que é mais rápido apenas para instalar tudo em um OneLiner:

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

Tentei ir com o Ruby1.9, mas tudo parou de funcionar devido a dependências quebradas em gemas e plugins, por isso não recomendaria mudar para 1.9, a menos que você esteja pronto para uma depuração pesada e saiba como restaurar seu sistema antigo!

Finalmente tudo está correndo de novo!

Outras dicas

Meu problema era um pouco diferente e, de fato, não das soluções que encontrei on-line funcionava.

Ao tentar instalar o SQLite3-Ruby após a atualização para o Snow Leopard e o Xcode 4.0 Trial, recebi a mensagem

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'

No entanto, o SQLITE3 foi instalado e também a reinstalação não ajudou. Eu já tinha o problema antes com versões universais de 64 bits e universais, mas que eu também havia esclarecido. Na verdade, eu poderia trabalhar com o SQLITE3.

Portanto, a instalação do GEM também deve dizer algo nesse sentido:

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

Então, CD para esse diretório e lá procuram extconf.rb, o meu estava em ./ext/sqlite3/extconf.rb Eu descobri que Ruby estava checando a biblioteca SQLITE3 usando

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

Então, demiti o IRB e verifiquei por que isso não funcionou:

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

Bem, na verdade, isso funciona e meu rubi encontra a biblioteca. Então, por que não funciona a partir da configuração? Inspecionar extconf.rb mostrou de perto a seguinte linha:

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

Quando eu executo isso no IRB:

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

Surpreendentemente, não encontrarei mais a biblioteca. Na verdade, eu não entendo como isso pode ser, mas é isso que acontece.

Então esta é a cura: comente a linha

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

em extconf.rb

Em seguida, de /library/ruby/GEMS/1.8/GEMS/SQLITE3-RUBY-1.3.1 Eu emiti

 sudo ruby ./setup.rb

Isso passou sem problemas (tentei antes de comentar a linha sqlite = e não funcionou)

Reiniciei o aplicativo Ruby que teve problemas com o SQLite. Funciona bem.

Espero que isso ajude alguém.

Sorvete

Encontrei algumas orientações sobre isso no blog de Don Park em:

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

Sua solução aponta de volta para empilhar o transbordamento no tópico seguinte:

Snow Leopard, Sqlite3-Ruby

A resposta sobre o comando LN parece ter resolvido meu problema. Espero que ajude você também.

Se a jóia não estiver construindo, não é porque você precisa necessariamente reconstruir o SQLITE3 da fonte, mas para construir a jóia, você precisará das bibliotecas de desenvolvedores SQLITE3.

Na maioria dos sistemas Linux/Unix, você pode instalá-los fazendo 'Sudo Apt-Get Install SQLite3-DEV', no entanto, não tenho certeza de como funciona com o Macports-mas verifique se você tem esse pacote. Você deve garantir que eles estejam no seu caminho ou passem no diretor, eles estão quando instalar a gema (consulte a saída da gema para dicas sobre as opções para fazer isso).

Eu tenho o SQLITE3 em execução no meu Mac muito bem, ambos com 1.8.7 e agora meu 1.9.1 Ruby atualizado. Você pode garantir que você tenha as ferramentas do desenvolvedor do XCode também instaladas.

Para aqueles no Snow Leopard 64 e ter esse problema instalando este Macport, corrigiu o problema para mim.

sudo port install rb-sqlite3 +universal
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top