无法加载此类文件-sqlite3 / sqlite3_native(LoadError)在Rails上的ruby上


84

当我尝试在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>'

如何避免出现此错误消息并继续进行?


您正在尝试什么操作系统?
萨菲斯

似乎是Windows问题。解决方案各不相同。看看这是否对您有用stackoverflow.com/a/6126062/2576857
Doodad

1
但似乎他没有在使用Windows。也许这篇文章会有所帮助。
Althaf Hameez

哦,是的,/ usr / local / etc,现在看到了,我很糟糕。根据我的发现,大多数人遇到此问题是因为s​​qlite exe和dll不在PATH变量中,但这仅发生在Windows用户身上。我认为您提供的文章应该能打动您,但是让我们拭目以待。
Doodad

如果是Rails 4和Ruby 2.1。-看这里
discipleartem

Answers:


121

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

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

您应该根据Rubygem路径和sqlite3版本进行调整。编辑上面的文件,然后寻找以下行

s.require_paths=["lib"]

更改为

s.require_paths= ["lib/sqlite3_native"]

7
考虑到Windows上的Rails用户数量,这是一个不应该首先存在的问题的绝妙错误。我很想知道为什么这可以正常工作……

1
这适用于1.3.9,但不适用于1.3.11。我在Win7 x64上。
Kidquick '16

3
它已经显示并且错误:无法加载“ active_record / connection_adapters / sqlite3_adapter”。确保config / database.yml中的适配器有效。如果您使用的适配器不是“ mysql2”,“ postgresql”或“ sqlite3”,则将必要的适配器gem添加到Gemfile中。
Sterling Diaz

3
上面的适配器错误似乎无法解决,首先执行下面的建议将为我节省很多时间-不过,也许他们会在下一个版本中修复此问题,或者在RailsInstaller之类的堆叠软件包中进行修复( ruby2.3.​​1与devkit(带有构建工具的Mingw),rails5.0.0.1)ps令人难以置信的是,此问题在2年后仍然持续存在-考虑到sqlite在框架默认应用程序中默认使用,并且是解决方法在guides.rubyonrails.org/getting_started.html
hello_earth

2
两年?三年呢?
沃伦·P

19

参见:https : //stackoverflow.com/a/39136421/6755206

幸运的
是,在无休止的尝试之后,您不必切换到ruby 2.0 ,就可以解决此问题。

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


脚步

  • gem uninstall sqlite3 --all

资源

建立

  • 在提取的目录中运行命令行
  • 确保已安装C编译器并将其添加到PATH
  • gem install bundler
  • bundle install
  • rake native gem
  • 您会发现生成一个名为“ pkg”的目录

安装

  • 输入dir'pkg'
  • gem install --local sqlite3-xxx.gem (“ xxx”是版本代码)

检查一下

  • irb
  • require 'sqlite3'

1
谢谢@hwding。这样完美!在我的情况下,Windows用户似乎在'pkg'中编译了两个sqlite3版本(32和64位),但是我只是安装了64位(我的情况)。
aaossa

1
是的,经过大量尝试,这是唯一有效的方法。...其他人(reddit.com/r/rails/comments/30s1cz/…)建议移至
无所事事的位置,

1
我确认这是适用于Windows 10的唯一解决方案。尝试了几次修复,但这是唯一可行的方法。
numediaweb

1
我已经按照提到的步骤完成操作,但是看不到任何使用name创建的文件夹pkg
Yashu Mittal,

一直为我工作,直到you'll find a dir named 'pkg' generated我在任何地方都找不到这样的目录。@Edson Momm下面的解决方案为我工作。
MSC

19

由于合并了拉取请求#229,因此可以为每个git:键安装sqlite3 。通过您的此添加,可以轻松使用sqlite3 Gemfile

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

这适用于RubyInstaller-2.4及更高版本。mingw-w64-x86_64-sqlite3运行时,它将自动安装所需的pacman软件包bundler install

RubyInstaller2常见问题解答中提供了有关Windows上Rails的更多提示。


1
这个答案对于新的ruby安装程序ruby版本ruby 2.5.1p57(2018-03-29修订版63029)和rails版本Rails 5.2.1
KTM

1
同时,PR已被合并。我相应地更新了我的答案。
拉尔斯·卡尼斯

为了解决SSL问题,我使用了:
gem'sqlite3

13
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

1
OMG是真实的:D只有这对我有用,Windows 10对于RoR来说很糟糕。非常感谢!
用户987

也为我工作。在Windows 10上从ruby 2.4更新到ruby 2.6之后,我的问题开始了
。– knut

这也是我在Win10 Ruby 2.6(x64)上的答案。谢谢!
vercingortix

我实际上不得不做几次。似乎任何时候我bundle install要安装新的gem时,我都会再次遇到此问题,并且需要重复上述步骤。
vercingortix

9

只需编辑Gemfile并添加即可 gem 'sqlite3', platform: :ruby


5

没有任何源代码的编译或下载预编译的库都可以解决此问题,相信我我已经尝试了一切,问题出在其他地方。这是在Windows上的工作方式:

bundle update sqlite3

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

bundle update nokogiri

享受您的Ruby应用程序!




4

最佳官方安装

我正在使用Rails 5.2.1p57,Windows 10仅运行以下行就解决了这个问题

gem uninstall sqlite3

并卸载所有已安装的版本。再次执行以下命令

gem install sqlite3 --platform=ruby

现在完成。让我知道问题是否仍然存在。


3

如果最佳答案不起作用,我发现的修复程序只是转到您的Gemfile,并在sqlite3之后添加版本号1.3.11(而不是1.3.9)。因此,您的Gemfile中的行现在应显示为:

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

2

将Ruby版本升级到2.5.X时,我遇到了同样的错误。我跟踪 rails task --trace了sqlite3在2.5版中不可用的情况,然后将我的GemFile更改为gem“ sqlite3”更改为“ sqlite3-ruby”,然后卸载了gem“ sqlite3”,最后运行了bundle install

我不知道是什么原因...我读到“ sqlite3”还不能用于ruby 2.5,但是我不确定。


2

为避免此错误,请确保已将gem sqlite3其添加到您的Gemfile中。然后从Sqlite下载链接中提取“ exe”和“ dll”到Ruby的bin文件夹。如果问题仍然存在。试试这个:

bundle update

gem uninstall sqlite3

如果在sqlite3的多个版本之间进行选择,请选择最后一个选项“所有版本”。在此输入最后一个号码

选择要卸载的gem:
1. sqlite3-1.3.13
2. sqlite3-1.3.13-x64-mingw32
3.所有版本
> 3

如果删除此gem,则将无法满足这些依赖关系。
继续卸载吗?[yN]
> y

gem install sqlite3 --platform=ruby

rails s

这应该工作。

如果以上内容适用于您,请通读此链接以获取更多说明。


1

这也发生在我身上。原来,我最初安装了SQLite 1.3.10,但是后来我从Rails教程的截屏项目中复制了一些gem,并列出了SQLite 1.3.9。然后我遇到了与您相同的错误。我将其更改回1.3.10并成功。

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


1

这是对我唯一有效的解决方案,源于此GitHub问题帖子

  1. https://www.sqlite.org/download.html获取sqlite3源的autoconf版本
  2. 启动MSYS Shell。
  3. 在sqlite3的解压缩位置中,仅配置静态版本,以避免将DLL保留在PATH:上./configure --disable-shared
  4. 编译并安装:make install DESTDIR=/c/dev/ruby/tmp。您可以更改目录。
  5. 打开Windows的命令提示符,然后运行gem uninstall sqlite3 --all以删除所有现有的sqlite3 gem。
  6. 再次在Windows的命令提示符下,构建并安装sqlite3 gem :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。那些include和lib目录可能不同,因此请首先检查。

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


和gemspec文件位于Gem的源文件夹中
Bilal Qadri

1

更新

将以下内容添加到为我固定的Gemfile中:gem'sqlite3','1.4.0',platform::ruby


1

为此,请在Gemfile中更改sqlite3 gem:

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

然后运行:

bundle install

0

我找到了!我看到了这个https://www.youtube.com/watch?v=lsrzvX0qzmA
我安装了:Rails版本:5.2.1 Ruby版本:2.5.3(x64-mingw32)Sqlite版本1.3.13
,我遇到了问题。我的解决方案:

  1. 在您的安装文件夹中,例如C:\ Ruby25-x64 \ lib \ ruby​​ \ gems \ 2.5.0 \ gems \
    您拥有以下文件夹:“ sqlite3-1.3.13”“ sqlite3-1.3.13-x64-mingw32”
  2. 查找文件
    C:\ Ruby25-x64 \ lib \ ruby​​ \ gems \ 2.5.0 \ gems \ sqlite3-1.3.13 \ lib \ sqlite3 \ sqlite3_native.so
  3. 将其复制到C:\ Ruby25-x64 \ lib \ ruby​​ \ gems \ 2.5.0 \ gems \ sqlite3-1.3.13-x64-mingw32 \ lib \ sqlite3 \ 2.5 \ sqlite3_native.so(可能不存在文件夹-创建并糊)

0

对于OSX用户,这可能是由于使用ruby管理器(例如rvm)导致的。

如果您编辑〜/ .bash_profile并添加以下内容:

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

您可以解决此问题。尝试重新构建之前,请重新启动Xcode。

在此处跟踪实际问题:https : //openradar.appspot.com/28726736)。

满分归功于:https : //egeek.me/2018/04/14/ipa-export-error-in-xcode-and-ruby/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.