无法激活sqlite3(〜> 1.3.6),已激活sqlite3-1.4.0


72

我正在使用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!在提出问题之前,请阅读本网站的内容和“如何提问”。
CloC

猜测,但我认为ActiveRecord仅适用于特定版本,并且在1.4的最新版本中会出现此错误。
克里斯(Kris)

Specified 'sqlite3' for database adapter, but the gem is not loaded. Add 如果sqlite在gemspec中,这也将显示为Gemfile的gem'sqlite3'(并确保其版本为ActiveRecord要求的最低版本)。
克里斯(Kris)

Answers:


96

我今天有一个类似的问题。这对我有用。我尝试使用迈克尔的方法,但是收到了类似的错误。

因此,我删除了我认为给我一个错误的宝石, gem uninstall sqlite3 -v 1.4.0

而是用于我的gem文件。 gem 'sqlite3', '~> 1.3.6' 跑了bundle update,它对我来说就像是一种魅力。


5
今天也有类似的问题。花了30分钟试图弄清楚,这个效果很好。非常感谢!
Jamsheed Mistri

3
有用。我认为问题出在ActiveRecord内部。
Sergei Avanesov '19

2
完全按照我所说的那样对我有用。在Ubuntu 10.04上运行Rails 5.2.2
domdaviesdev,

2
@skalee有一个完美的答案。
马克-安德烈·Lafortune

Rails已经对master进行了更改,但我想还没有发布?这是一个巨大的问题,新用户想要尝试Rails,甚至连错误都无法启动它。
LifterCoder

65

我解决了在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。


2
像魅力一样工作。仅供参考...我正在使用mac(osx 10.13.2),rails 5.2.2,ruby 2.6,并且所有开发工作都是在RubyMine中完成的。
zevij

很棒!使用Rails 5.2.2和Ruby 2.6.1。
cyber_dave

4
依赖关系版本在5.2版的Sqlite3的ActiveRecord适配器中硬编码为gem "sqlite3", "~> 1.3.6"
rudygodoy,

〜> 1.3不会自动将其设置为<1.4,所以我想可以省略<1.4部分,因为这是隐含的。我也不知道你为什么说最新的1.3是1.3.11。您在2月7日发布了答案,最新的1.3是rubygems.org/gems/sqlite3/versions。1.3.13于2017年1月发布。早在您写下答案并声称最新值为1.3.11之前,所以不确定您为什么认为它是1.3.11吗?鳞屑的线路少一点多余的作品gem 'sqlite3', '~> 1.3.6'gem sqlite3 '1.3.13'作品,这是最新的1.3
barlop

33

此问题是由Active Record引起的,该Active Record对sqlite3 gem具有版本限制。例如,在Rails 5.2.2(在我编写此响应时,最新的稳定版本)中,它是~> 1.3.6。但是,此约束不是在gemspec中指定的,而是在包含适配器类的源文件中指定的。结果,Bundler不知道它,并安装了冲突的sqlite3 gem版本1.4.0。

好消息是,该修补程序已经合并到master和Rails 5.2维护分支(可能还有其他分支)中,应该包含在5.2.3中。

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

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

第二个选项怎么做?
ToothlessRebel

我猜不是gem 'sqlite3', '~> 1.3.6'。最好只指定列出的最新1.3版本rubygems.org/gems/sqlite3/versions。那gem sqlite3 '1.3.13'
barlop

@ToothlessRebel gem "activerecord", github: "rails/rails", branch: "5-2-stable"。尽管您可能还需要安装来自Git的其他Rails gem。@barlop是的,取决于您的实际需求。
skalee,

13

没有一种解决方案适合我,因此我跟踪了错误并找到了连接适配器

位置:

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

谢谢!为我工作。
MaKaRoN_IV

6

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

bundle update sqlite3

或更改Gemfile中的gem版本:

gem 'sqlite3', '~> 1.4'

几乎。无法激活Gemfile括号中的sqlite3(〜> xxx)之后,我不得不使用该版本。
qwerty_so
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.