【问题标题】:cannot load such file -- sqlite3/sqlite3_native (LoadError) on ruby on rails无法在 ruby​​ on rails 上加载此类文件 - sqlite3/sqlite3_native (LoadError)
【发布时间】:2013-07-12 16:58:03
【问题描述】:

当我尝试在 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
  • 但是他好像没有用windows。也许this article 会有所帮助。
  • 哦,是的,/usr/local/etc,现在看到了,我的错。根据我的发现,大多数人遇到这个问题是因为 sqlite exe 和 dll 不在 PATH 变量中,但这只发生在 Windows 用户身上。我认为您提供的那篇文章应该一针见血,但让我们拭目以待。
  • 如果 Rails 4 和 Ruby 2.1。 - 看here

标签: ruby-on-rails sqlite


【解决方案1】:

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

窗户: C:\Ruby21\lib\ruby\gems\2.1.0\specifications.

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

s.require_paths=["lib"]

改成

s.require_paths= ["lib/sqlite3_native"]

【讨论】:

  • 考虑到 Windows 上的 Rails 用户数量,对于一个原本不应该存在的问题来说,这是一个奇妙的错误。我很想知道为什么这确实有效......
  • 这适用于 1.3.9,但对于 1.3.11 不是必需的。我在 Win7 x64 上。
  • 它已经出现并且错误:无法加载“active_record/connection_adapter/sqlite3_adapter”。确保 config/database.yml 中的适配器有效。如果您使用“mysql2”、“postgresql”或“sqlite3”以外的适配器,请将必要的适配器 gem 添加到 Gemfile。
  • 上述适配器错误似乎无法解决,首先按照 hwding 下面的建议为我节省不少时间 - 不过,也许他们会在下一个版本中解决这个问题,或者修复了堆叠包中的问题,如 RailsInstaller(ruby2.3.​​1 with devkit(mingw with build tools),rails5.0.0.1)ps令人难以置信的是,这个问题在 2 年后仍然存在 - 鉴于默认情况下在骨架默认应用程序中使用 sqlite,并且是 guides.rubyonrails.org/getting_started.html 的方法
  • 两年?三年怎么样?
【解决方案2】:

由于pull request #229 已经被合并,sqlite3 可以通过git: 键安装。通过您的Gemfile 中的此添加,可以轻松使用 sqlite3:

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

这适用于 RubyInstaller-2.4 和更新版本。当你运行bundler install时,它会自动安装所需的pacman包mingw-w64-x86_64-sqlite3

RubyInstaller2 FAQ 中有更多有关 Rails on Windows 的提示。

【讨论】:

  • 此答案对新的 ruby​​ 安装程序 ruby​​ 版本 ruby 2.5.1p57(2018-03-29 修订版 63029) 和 rails 版本 Rails 5.2.1
  • PR同时被合并。我相应地更新了我的答案。
  • 为了解决我使用的 SSL 问题:gem 'sqlite3', git: "git://github.com/sparklemotion/sqlite3-ruby.git"
  • 可能不再需要 git repo
【解决方案3】:

见: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”的目录

安装

  • 输入目录“pkg”
  • gem install --local sqlite3-xxx.gem(‘xxx’为版本号)

检查

  • irb
  • require 'sqlite3'

【讨论】:

  • 谢谢@hwding。这完美!在我的情况下,Windows 用户,似乎在“pkg”中编译了两个 sqlite3 版本(32 位和 64 位),但我只安装了 64 位版本(我的情况)。
  • 是的,经过大量尝试,这是唯一可行的方法....其他人 (reddit.com/r/rails/comments/30s1cz/…) 建议迁移到 vagrant 之类的东西并完全跳过 Windows+Rails
  • 我确认这是唯一适用于 Windows 10 的解决方案;尝试了几个修复,但这是唯一有效的。
  • 我已经按照提到的步骤完成了,但是我没有看到任何名为pkg的文件夹。
  • 为我工作到you'll find a dir named 'pkg' generated,因为我在任何地方都没有看到这样的目录。 @Edson Momm 下面的解决方案对我有用。
【解决方案4】:
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

【讨论】:

  • OMG 是真的 :D 只有这对我有用,Windows 10 对 RoR 来说太糟糕了。非常感谢!
  • 也为我工作。我的问题是在 Windows 10 上从 ruby​​ 2.4 更新到 ruby​​ 2.6 后开始的。
  • 这也是我在 Win10 Ruby 2.6 (x64) 上的答案。谢谢!
  • 我实际上不得不这样做几次。似乎任何时候我为了安装新的 gem 会做一个bundle install,我会再次遇到这个问题,需要重复上述步骤。
【解决方案5】:

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

【讨论】:

    【解决方案6】:

    不编译源代码或下载预编译库将解决这个问题,相信我我尝试了一切,问题出在其他地方。这是它在 Windows 上的工作方式:

    bundle update sqlite3

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

    bundle update nokogiri

    享受您的 Ruby 应用程序!

    【讨论】:

      【解决方案7】:

      卸载并重新安装 sqlite3 gem 对我有用。

      gem uninstall sqlite3
      
      bundle
      

      【讨论】:

        【解决方案8】:

        这对我有用:

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

        【讨论】:

          【解决方案9】:

          最佳官方安装

          我正在使用 Rails 5.2.1p57,Windows 10 只需运行以下几行即可解决问题

          gem uninstall sqlite3
          

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

          gem install sqlite3 --platform=ruby
          

          你现在完成了。 如果问题仍然存在,请告诉我。

          【讨论】:

            【解决方案10】:

            如果最重要的答案不起作用,我发现的一个修复方法就是转到您的 Gemfile 并在 sqlite3 之后添加版本号 1.3.11(而不是 1.3.9)。所以你的 Gemfile 中的行现在应该是:

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

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

                【解决方案12】:

                为避免此错误,请确保将 gem sqlite3 添加到您的 Gemfile。 然后从Sqlite download link 中提取“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

                这应该可行。

                如果以上内容适合您,请通读link 以获得更多说明。

                【讨论】:

                  【解决方案13】:

                  这也发生在我身上。原来我最初安装的是 SQLite 1.3.10,但后来我从 Rails 教程截屏项目中复制了一些 gem,它列出了 SQLite 1.3.9。然后我得到了和你一样的错误。我将它改回 1.3.10 并且它有效。

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

                  【讨论】:

                    【解决方案14】:

                    这是唯一对我有用的解决方案,源自this GitHub issue post

                    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 版。

                    【讨论】:

                    • 和 Gem 源文件夹中的 gemspec 文件
                    【解决方案15】:

                    我找到了!我看到了这个https://www.youtube.com/watch?v=lsrzvX0qzmA
                    我安装了: 导轨版本: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 (可能是文件夹不存在 - 创建并粘贴)

                    【讨论】:

                      【解决方案16】:

                      更新

                      将以下内容添加到为我修复的 Gemfile 中: gem 'sqlite3', '1.4.0', 平台: :ruby

                      【讨论】:

                        【解决方案17】:

                        为此在 Gemfile 中更改您的 sqlite3 gem:

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

                        然后运行:

                        bundle install
                        

                        【讨论】:

                          【解决方案18】:

                          对于 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/

                          【讨论】:

                            【解决方案19】:

                            我有同样的探针,但它很简单,

                            gem uninstall sqlite3 --all
                            

                            然后运行

                            gem install sqlite3
                            

                            一切都应该从那里开始。

                            【讨论】:

                              【解决方案20】:

                              我试过了: sudo apt-get 安装 sqlite3 然后我尝试了: 宝石安装 sqlite3 它奏效了

                              【讨论】:

                              • gem install sqlite3 已在其他答案中提及。
                              • 我试过 gem install sqlite3 但没有用,而“sudo apt-get install sqlite3”有效。
                              • 您的评论与您的​​回答相反。
                              猜你喜欢
                              • 2018-10-19
                              • 2019-02-02
                              • 1970-01-01
                              • 2018-08-19
                              • 1970-01-01
                              • 2013-03-25
                              • 2013-03-21
                              相关资源
                              最近更新 更多