Ruby on rails 无法在ruby on rails上加载这样的文件--sqlite3/sqlite3_native(LoadError)

Ruby on rails 无法在ruby on rails上加载这样的文件--sqlite3/sqlite3_native(LoadError),ruby-on-rails,sqlite,Ruby On Rails,Sqlite,当我尝试在Ruby 2.0.0上使用Rails 4.0.0设置服务器的基本安装和启动时,我会遇到以下错误消息 /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

当我尝试在Ruby 2.0.0上使用Rails 4.0.0设置服务器的基本安装和启动时,我会遇到以下错误消息

/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>'
/usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:6:在'require'中:无法加载此类文件--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'
来自/usr/local/lib/ruby/gems/2.0.0/gems/sqlite3-1.3.7/lib/sqlite3.rb:2:in`'
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层)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`'
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'
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`'
从箱子/轨道:4:in“require”
从箱子/轨道:4:in`'

如何避免此错误消息并继续操作?

查找您的sqlite3 gemspec文件。一个例子是
/usr/local/share/gem/specifications/sqlite3-1.3.7.gempec

窗口:
C:\Ruby21\lib\ruby\gems\2.1.0\specifications

您应该根据Rubygem路径和sqlite3版本进行调整。 编辑上面的文件并查找下面的行

s.require_paths=["lib"]
换成

s.require_paths= ["lib/sqlite3_native"]

这也发生在我身上。原来我最初安装了SQLite 1.3.10,但后来我从Rails教程的screencasts项目中复制了一些gem,它列出了SQLite 1.3.9。然后我犯了和你一样的错误。我把它改回了1.3.10,它成功了


(这是在Windows 7上。我正在Cloud9 IDE上运行screencast教程)。

卸载并重新安装sqlite3 gem对我来说很有效

gem uninstall sqlite3

bundle

如果上面的答案不起作用,我发现的一个修复方法就是直接转到您的GEM文件,并在sqlite3之后添加版本号1.3.11(而不是1.3.9)。因此,文件中的行现在应为:

# Use sqlite3 as the database for Active Record
gem 'sqlite3',  '1.3.11'
见:

幸运的是,您不必切换到ruby 2.0
经过无休止的尝试,这个问题有一个解决方案


台阶 之前
  • gem卸载sqlite3--all
来源
  • 下载最新的sqlite3 ruby
  • 解开包裹
建造
  • 在提取的目录中运行命令行
  • 确保已安装C编译器并将其添加到PATH
  • gem安装bundler
  • bundle安装
  • rake原生gem
  • 您将发现生成了一个名为“pkg”的目录
安装
  • 输入dir'pkg'
  • gem安装——本地sqlite3 xxx.gem
    ('xxx'是版本代码)
检查
  • irb
  • 需要'sqlite3'

编译源代码或下载预编译库都不能解决这个问题,相信我,我尝试了所有方法,问题出在其他地方。这是它在windows上的工作方式:

bundle更新sqlite3

在这一次关于nokogiri的错误之后,您可能会遇到另一个类似的错误,请使用以下命令进行修复:

bundle更新nokogiri

享受你的Ruby应用

由于已经合并,sqlite3可以按照git:键安装。通过在
Gemfile
中添加此项,可以轻松使用sqlite3:

gem 'sqlite3', git: "https://github.com/sparklemotion/sqlite3-ruby"
这适用于RubyInstaller-2.4及更新版本。当您运行
bundler install
时,它会自动安装所需的pacman包
mingw-w64-x86\u 64-sqlite3


在中有更多关于Windows上Rails的提示。

这是唯一适合我的解决方案,源自:

  • 从中获取sqlite3源的autoconf版本
  • 启动MSYS外壳
  • 在sqlite3的解包位置,仅配置静态版本以避免将DLL保留在路径上:
    /configure--disable shared
  • 构建并安装它:
    makeinstalldestdir=/c/dev/ruby/tmp
    。您可以更改目录
  • 打开windows的命令提示符并运行
    gem uninstall sqlite3--all
    以删除所有现有sqlite3 gem
  • 再次在windows的命令提示符下,构建并安装sqlite3 gem:
    gem安装sqlite3--platform=ruby--with-sqlite3-include=C:\dev\ruby\tmp\usr\local\include--with-sqlite3-lib=C:\dev\ruby\tmp\usr\local\lib
    。那些include和lib目录可能不同,所以首先检查一下

  • 我在Windows 10上使用Ruby 2.5.1版和Rails 5.2.0版。

    只需编辑Gemfile并添加
    gem'sqlite3',platform::Ruby

    当我将Ruby版本升级到2.5.X时,我遇到了相同的错误。我通过
    rails任务跟踪--trace
    发现sqlite3在版本2.5中不可用,然后在卸载gem“sqlite3”并最终运行
    捆绑安装后,我将gem文件gem“sqlite3”更改为“sqlite3 ruby”

    我不知道是什么原因。。。我读到ruby 2.5尚未提供“sqlite3”,但我不确定。

    这对我来说很有效:

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

    最佳官方安装

    Im使用rails 5.2.1p57
    gem uninstall sqlite3
    
    gem install sqlite3 --platform=ruby
    
    gem uninstall sqlite3 --all
    ridk exec pacman -S mingw-w64-x86_64-sqlite3
    gem inst sqlite3 --platform ruby
    
    Windows 10
    Ruby 2.5.3
    Rails 5.2.2
    
    [[ "$APP" = *"/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/"* ]] && {
      echo Xcode detected
      rvm use system
    }
    
    gem 'sqlite3', git: "https://github.com/larskanis/sqlite3-ruby", branch: "add-gemspec"
    
    bundle install
    
    gem uninstall sqlite3 --all
    
    gem install sqlite3