【问题标题】:can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0无法激活 sqlite3 (~> 1.3.6),已经激活 sqlite3-1.4.0
【发布时间】:2019-06-28 20:25:21
【问题描述】:

我正在使用 Ubuntu,但在将 db:migrate 用于 ruby​​ 项目时遇到了问题。

rails aborted!
LoadError: Error loading the 'sqlite3' Active Record adapter. Missing a gem it depends on? can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile.
/home/juan/odin_on_rails/RailsaAPP/bin/rails:9:in `<top (required)>'
/home/juan/odin_on_rails/RailsaAPP/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
Gem::LoadError: can't activate sqlite3 (~> 1.3.6), already activated sqlite3-1.4.0. Make sure all dependencies are added to Gemfile.
/home/juan/odin_on_rails/RailsaAPP/bin/rails:9:in `<top (required)>'
/home/juan/odin_on_rails/RailsaAPP/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate => db:load_config
(See full trace by running task with --trace)

【问题讨论】:

  • 欢迎来到 Stack Overflow!提问前请阅读what this site is about 和“How to ask”。
  • 猜测,但我认为 ActiveRecord 仅适用于特定版本,并且在最近发布的 1.4 版本中,您会收到此错误。
  • 这也会在您的 Gemfile 中显示为 Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem 'sqlite3'`(并确保它的版本是 ActiveRecord 要求的最低版本)。` 如果 sqlite 在 gemspec 中。

标签: ruby-on-rails ruby sqlite


【解决方案1】:

我今天遇到了类似的问题。这对我有用。我尝试使用 Michael 的方法,但收到了类似的错误。

因此,我删除了我认为会给我带来错误的 gem,通过 gem uninstall sqlite3 -v 1.4.0

而是在我的 gem 文件中使用。 gem 'sqlite3', '~&gt; 1.3.6' 运行bundle update,它对我来说就像一个魅力。

【讨论】:

  • 今天也遇到了类似的问题。花了 30 分钟试图弄清楚,这非常有效。非常感谢!
  • 它有效。我认为问题出在 ActiveRecord 内部。
  • 这完全符合我的说明。在 Ubuntu 10.04 上运行 Rails 5.2.2
  • @skalee 给出了完美的答案。
  • Rails 已经对 master 进行了更改,但我想它还没有发布?这是一个巨大的问题,对于想要尝试 Rails 的新用户甚至无法顺利启动它。
【解决方案2】:

我解决了这个在 Gemfile 中配置 sqlite3 版本的错误,如下所示:

gem 'sqlite3', '~> 1.3', '< 1.4'

似乎 sqlite3-1.3.6 不能正常工作,而且 sqlite3-1.4 还不支持,所以它(我建议纠正这个问题的行)将下载最新的 1.3 版本。就我而言,它是 sqlite3-1.3.11。

我在我的项目中使用 rails-5.0.0 和 ruby​​-2.5.1。

【讨论】:

  • 工作就像一个魅力。仅供参考...我正在使用 mac (osx 10.13.2)、rails 5.2.2、ruby 2.6,所有开发都在 RubyMine 中完成。
  • 效果很好!使用 Rails 5.2.2 和 Ruby 2.6.1。
  • 依赖版本在 ActiveRecord 的 Sqlite3 适配器中硬编码为 5.2.2 gem "sqlite3", "~&gt; 1.3.6"
  • Won't that ~> 1.3 会自动使其 rubygems.org/gems/sqlite3/versions 。 1.3.13 于 2017 年 1 月发布。早在您写下答案并声称最新版本是 1.3.11 之前,所以不知道为什么您认为它是 1.3.11?! Scaly 的线少了一点多余,工作 gem 'sqlite3', '~&gt; 1.3.6'gem sqlite3 '1.3.13' 工作,这是最新的 1.3
【解决方案3】:

问题是由对 sqlite3 gem 有版本限制的 Active Record 引起的。例如,如果是 Rails 5.2.2(我写这篇回复时的最新稳定版本),它是~&gt; 1.3.6。但是,这个约束没有在 gemspec 中指定,而是在 a source file which contains the adapter class 中指定。结果,Bundler 没有意识到这一点,并安装了 sqlite3 gem 版本 1.4.0,这是冲突的。

好消息是fix has been already merged 进入 master 和 Rails 5.2 维护分支(可能还有其他),并且应该包含在 5.2.3 中。

目前,您可以执行以下操作之一:

  • 将 sqlite3 约束添加到您的 Gemfile:gem 'sqlite3', '~&gt; 1.3.6'
  • 从名为 5-2-stable 的分支安装 Active Record。

【讨论】:

  • 第二个选项怎么做?
  • 我猜不是 gem 'sqlite3', '~&gt; 1.3.6' 。也可以只指定列出的最新 1.3 rubygems.org/gems/sqlite3/versions 。那么gem sqlite3 '1.3.13'?
  • @ToothlessRebel gem "activerecord", github: "rails/rails", branch: "5-2-stable"。尽管您可能还需要从 Git 安装其他一些 Rails gem。 @barlop 是的,这取决于你真正想要什么。
【解决方案4】:

没有一个解决方案对我有用,所以我跟踪了错误并找到了连接适配器

地点:

C:\Ruby\lib\ruby\gems\2.5.0\gems\activerecord-5.2.2\lib\active_record\connection_adapters\

文件:

sqlite3_adapter.rb

变了

gem "sqlite3", "~> 1.3.6"

gem "sqlite3", "~> 1.4.0"

我刷新了我的网页,一切正常!!!

我的环境

Windows 10
Ruby : 2.5.3-p105
Rails: 5.2.2

【讨论】:

  • 谢谢!为我工作。
【解决方案5】:

看起来系统中的sqlite3版本与应用程序中安装的不同。在这种情况下,您可以为您的应用更新 gem 版本:

bundle update sqlite3

或者在 Gemfile 中更改 gem 版本:

gem 'sqlite3', '~> 1.4'

【讨论】:

  • 差不多。我不得不使用can't activate sqlite3 (~> x.x.x)之后的版本在Gemfile的括号中。
猜你喜欢
  • 2013-01-07
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多