não pode carregar tal arquivo - sqlite3 / sqlite3_native (LoadError) em ruby ​​on rails

84

Quando tento configurar a instalação básica e inicialização do servidor usando Rails 4.0.0 no Ruby 2.0.0, estou enfrentando a seguinte mensagem de erro.

/usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:in `require': cannot load such file -- sqlite3/sqlite3_native (LoadError)
    from /usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:in `rescue in <top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:2:in `<top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:72:in `block (2 levels) in require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `each'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:70:in `block in require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `each'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/runtime.rb:59:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler.rb:132:in `require'
    from /home/penchal/new/site/config/application.rb:7:in `<top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:76:in `require'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:76:in `block in <top (required)>'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `tap'
    from /usr/local/lib/ruby/gems/2.0.0/gems/railties-4.0.0/lib/rails/commands.rb:73:in `<top (required)>'
    from bin/rails:4:in `require'
    from bin/rails:4:in `<main>'

Como posso evitar essa mensagem de erro e prosseguir?

Penchala Reddy Audireddy
fonte
em qual sistema operacional você está testando?
Saifis
Parece ser um problema do Windows. As soluções variam. Veja se isso é suficiente para você stackoverflow.com/a/6126062/2576857 .
Doodad
1
Mas não parece que ele está usando windows. Talvez este artigo seja útil.
Althaf Hameez de
Oh sim, / usr / local / etc, vi isso agora, que pena. Pelo que descobri, a maioria das pessoas com esse problema era por causa do sqlite exe e dll não na variável PATH, mas isso só acontecia com usuários do Windows. Acho que o artigo que você forneceu deve acertar o prego na cabeça, mas vamos esperar para ver.
Doodad de
Se Rails 4 e Ruby 2.1. - veja aqui
discipleartem

Respostas:

121

Encontre seu arquivo gemspec sqlite3. Um exemplo é /usr/local/share/gem/specifications/sqlite3-1.3.7.gemspec

Do Windows: C:\Ruby21\lib\ruby\gems\2.1.0\specifications.

Você deve ajustar de acordo com o caminho do Rubygem e a versão do sqlite3. Edite o arquivo acima e procure a seguinte linha

s.require_paths=["lib"]

mude para

s.require_paths= ["lib/sqlite3_native"]
Harish Gopalakrishnan
fonte
7
Este é um erro fantástico para um problema que não deveria existir em primeiro lugar, dado o número de usuários Rails no Windows. Eu adoraria saber por que exatamente isso funciona ...
1
Isso funcionou para 1.3.9, mas não foi necessário para 1.3.11. Estou no Win7 x64.
Kidquick
3
Já apresentado e erro: Não foi possível carregar 'active_record / connection_adapters / sqlite3_adapter'. Certifique-se de que o adaptador em config / database.yml seja válido. Se você usar um adaptador diferente de 'mysql2', 'postgresql' ou 'sqlite3', adicione a gem do adaptador necessária ao Gemfile.
Sterling Diaz
3
o erro acima com o adaptador não parece ser solucionável, fazer o que hwding sugere abaixo primeiro me pouparia algum tempo - mais uma vez, talvez eles consertem isso nas próximas versões, ou consertem isso em pacotes empilhados como RailsInstaller ( ruby2.3.1 com devkit (mingw com ferramentas de compilação), rails5.0.0.1) ps é inacreditável que este problema ainda persista, após 2 anos - dado que sqlite é usado por padrão no aplicativo padrão esqueleto, e é o caminho a seguir em guias.rubyonrails.org/getting_started.html
hello_earth
2
Dois anos? Que tal TRÊS anos?
Warren P
19

consulte :https://stackoverflow.com/a/39136421/6755206

felizmente, você não precisa mudar para o ruby ​​2.0,
há uma solução para este problema, depois de tentativas intermináveis ​​...

https://github.com/hwding/sqlite3-ruby-win


Passos

Pré

  • gem uninstall sqlite3 --all

Fonte

Construir

  • execute a linha de comando no diretório extraído
  • certifique-se de ter seu compilador C instalado e adicionado ao PATH
  • gem install bundler
  • bundle install
  • rake native gem
  • você encontrará um diretório chamado 'pkg' gerado

Instalar

  • digite dir 'pkg'
  • gem install --local sqlite3-xxx.gem ('xxx' é o código da versão)

Verifica

  • irb
  • require 'sqlite3'
Hwding
fonte
1
Obrigado @hwding. Isso funciona perfeitamente! No meu caso, usuário do Windows, parece que duas versões do sqlite3 (32 e 64 bits) foram compiladas em 'pkg', mas acabei de instalar a de 64 bits (meu caso).
aaossa
1
sim, depois de muitas tentativas, esta é a única maneira que funcionou .... outras pessoas ( reddit.com/r/rails/comments/30s1cz/… ) sugerem mudar para algo como vagrant e pular o Windows + Rails completamente
hello_earth
1
Confirmo que esta é a única solução que funciona para o Windows 10; tentei algumas correções, mas esta é a única que funciona.
numediaweb
1
Eu fiz de acordo com os passos mencionados, mas não vejo nenhuma pasta criada com o nome pkg.
Yashu Mittal
Trabalhou para mim até you'll find a dir named 'pkg' generatedporque eu não vi tal diretório em lugar nenhum. A solução de @Edson Momm abaixo funcionou para mim.
MSC de
19

Como a solicitação pull # 229 foi mesclada, sqlite3 pode ser instalado por git:chave. É possível usar sqlite3 facilmente por meio desta adição em Gemfile:

gem 'sqlite3', git: "https://github.com/sparklemotion/sqlite3-ruby"

Isso funciona no RubyInstaller-2.4 e mais recente. Ele instala automaticamente o pacote pacman necessário mingw-w64-x86_64-sqlite3quando você executa bundler install.

Existem mais algumas dicas para Rails no Windows no FAQ do RubyInstaller2 .

Lars Kanis
fonte
1
Esta resposta é útil para os novos instaladores ruby ​​ruby ​​versão ruby 2.5.1p57 (2018-03-29 revisão 63029) e rails versão Rails 5.2.1
KTM
1
O PR foi fundido entretanto. Eu atualizei minha resposta de acordo.
Lars Kanis
Para contornar os problemas de SSL, usei: gem 'sqlite3', git: "git: //github.com/sparklemotion/sqlite3-ruby.git"
GrabzIt
13
gem uninstall sqlite3 --all
ridk exec pacman -S mingw-w64-x86_64-sqlite3
gem inst sqlite3 --platform ruby

Isso resolveu o problema para mim.

Windows 10
Ruby 2.5.3
Rails 5.2.2
Edson Momm
fonte
1
Meu Deus, isso é real: D Só que isso funciona para mim, o Windows 10 é terrível para o RoR. Muito obrigado!
Usuário 987
Funcionou também para mim. Meu problema começou após uma atualização do Ruby 2.4 para o Ruby 2.6 no Windows 10.
knut
Esta foi a resposta para mim também no Win10 Ruby 2.6 (x64). Obrigado!
vercingortix de
Na verdade, tive que fazer isso algumas vezes. Parece que a qualquer momento que eu faria um bundle installpara instalar uma nova gema, eu teria esse problema novamente e precisaria repetir as etapas acima.
vercingortix
9

Basta editar o Gemfile e adicionar gem 'sqlite3', platform: :ruby.

RAM
fonte
5

Nenhuma compilação dos fontes ou download de bibliotecas pré-compiladas vai resolver este problema, acredite, eu tentei de tudo, o problema está em outro lugar. É assim que funciona no Windows:

bundle update sqlite3

Você provavelmente obterá outro erro semelhante após este em relação ao nokogiri, corrija-o com o comando:

bundle update nokogiri

Aproveite seu Ruby App!

Norman Seßler
fonte
4

Desinstalar e reinstalar a gem sqlite3 funcionou para mim.

gem uninstall sqlite3

bundle
JackHasaKeyboard
fonte
4

Isso funcionou para mim:

gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"
Bolan Oluwa
fonte
4

MELHOR INSTALAÇÃO OFICIAL

Estou usando o rails 5.2.1p57, Windows 10. Apenas executando as seguintes linhas resolveu o problema

gem uninstall sqlite3

e desinstale todas as versões instaladas. novamente execute o seguinte comando

gem install sqlite3 --platform=ruby

Agora você terminou. Avise-me se o problema persistir.

Pradeep Sapkota
fonte
3

Se a primeira resposta não funcionar, uma correção que descobri é simplesmente ir para o Gemfile e adicionar o número de versão 1.3.11 (em vez de 1.3.9) logo após sqlite3. Portanto, a linha em seu Gemfile agora deve ser:

# Use sqlite3 as the database for Active Record
gem 'sqlite3',  '1.3.11'
Andrew Britton
fonte
2

Eu tive o mesmo erro ao atualizar minha versão do Ruby para 2.5.X. Eu descobri rails task --traceque o sqlite3 não está disponível para a versão 2.5, então eu mudo meu GemFile a gem "sqlite3" mude para "sqlite3-ruby", depois de desinstalar a gem "sqlite3" e finalmente executar o bundle install.

Não sei qual é o motivo ... Eu li que "sqlite3" ainda não está disponível para ruby ​​2.5, mas não tenho certeza.

Adrian Higuita
fonte
2

Para evitar este erro, certifique-se de que gem sqlite3foi adicionado ao seu Gemfile. Em seguida, extraia "exe" se "dll" s do link de download do Sqlite para a pasta bin do Ruby. Se o problema ainda persistir. Experimente isto:

bundle update

gem uninstall sqlite3

Dada a escolha entre várias versões do sqlite3, escolha a última opção 'Todas as versões'. Insira o último número aqui

Selecione gem para desinstalar:
1. sqlite3-1.3.13
2. sqlite3-1.3.13-x64-mingw32
3. Todas as versões
> 3 .
.
Se você remover esta gema, essas dependências não serão atendidas.
Continuar com Desinstalar? [sN]
> y

gem install sqlite3 --platform=ruby

rails s

Isso deve funcionar.

Leia este link para obter mais explicações se a descrição acima funcionar para você.

Saurabh Borse
fonte
1

Isso também me aconteceu. Descobri que eu tinha instalado originalmente o SQLite 1.3.10, mas então copiei algumas joias do projeto de screencasts do tutorial Rails e ele listou o SQLite 1.3.9. Então eu recebi o mesmo erro que você. Mudei de volta para 1.3.10 e funcionou.

(Isso é no Windows 7. Eu estava executando o tutorial de screencast no IDE Cloud9).

Paul Macias
fonte
1

Esta é a única solução que funcionou para mim, derivada desta postagem de problema no GitHub :

  1. Obtenha a versão autoconf das fontes sqlite3 em https://www.sqlite.org/download.html .
  2. Inicie o shell MSYS.
  3. No local descompactado para o seu sqlite3, versão estática configure apenas para evitar manter DLL no PATH: ./configure --disable-shared.
  4. Construir e instalá-lo: make install DESTDIR=/c/dev/ruby/tmp. Você pode alterar o diretório.
  5. Abra o prompt de comando do Windows e execute gem uninstall sqlite3 --allpara remover todas as gemas sqlite3 existentes.
  6. Novamente no prompt de comando de janelas, construção e instalação gem sqlite3: gem install sqlite3 --platform=ruby -- --with-sqlite3-include=C:\dev\ruby\tmp\usr\local\include --with-sqlite3-lib=C:\dev\ruby\tmp\usr\local\lib. Esses diretórios include e lib podem ser diferentes, então verifique primeiro.

Estou usando Ruby versão 2.5.1 e Rails versão 5.2.0 no Windows 10.

Ismailarilik
fonte
e arquivo gemspec na pasta de origem do Gem
Bilal Qadri
1

Eu encontrei! Eu vi este https://www.youtube.com/watch?v=lsrzvX0qzmA
i instalei: Versão Rails: 5.2.1 Versão Ruby: 2.5.3 (x64-mingw32) Sqlite versão 1.3.13
e eu tenho o seu problema .. . minha solução:

  1. Em sua pasta de instalação, como C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \,
    você tem as pastas: "sqlite3-1.3.13" "sqlite3-1.3.13-x64-mingw32"
  2. Encontre o arquivo
    C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \ sqlite3-1.3.13 \ lib \ sqlite3 \ sqlite3_native.so
  3. Copie-o em C: \ Ruby25-x64 \ lib \ ruby ​​\ gems \ 2.5.0 \ gems \ sqlite3-1.3.13-x64-mingw32 \ lib \ sqlite3 \ 2.5 \ sqlite3_native.so (podem não existir pastas - criar e colar)
Roman Dergunov
fonte
1

Atualizada

Adicionando o seguinte ao Gemfile corrigido para mim: gem 'sqlite3', '1.4.0', plataformas:: ruby

Ryan
fonte
1

Altere sua gem sqlite3 no Gemfile para isso:

gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"

Então corra:

bundle install
Nicolás Nisoria
fonte
0

Para usuários OSX, isso pode resultar do uso de um gerenciador de ruby ​​(por exemplo, rvm).

Se você editar seu ~ / .bash_profile e adicionar este:

[[ "$APP" = *"/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"* ]] && {
  echo Xcode detected
  rvm use system
}

Você pode contornar o problema. Reinicie o Xcode antes de tentar construir novamente.

O problema real é rastreado aqui: https://openradar.appspot.com/28726736 ).

O crédito total vai para: https://egeek.me/2018/04/14/ipa-export-error-in-xcode-and-ruby/

Julian K
fonte