Rails SQLite适配器错误

18

我正在遵循Rails教程中的指示,但在尝试使用脚手架命令时遇到了问题。

运行以下命令时:

rails generate scaffold User name:string email:string  

我遇到了错误:
C:/RailsInstaller/Ruby1.9.2/lib/ruby/gems/1.9.1/gems/activerecord-3.1.0/lib/active_record/connection_adapters/abstract/connection_specification.rb:71:in `rescue in establish_connection': Please install the sqlite3 adapter: `gem install activerecord-sqlite3-adapter` (can't activate sqlite3 (~> 1.3.4), already activated sqlite3-1.3.3-x86-mingw32. Make sure all dependencies are added to Gemfile.) (RuntimeError)

运行中:

gem install activerecord-sqlite3-adapter

I got the error:

ERROR:  Could not find a valid gem 'activerecord-sqlite3-adapter' (>= 0) in any repository
ERROR:  Possible alternatives: activerecord-jdbcsqlite3-adapter, activerecord-sqlserver-adapter, activerecord-nulldb-adapter, activerecord-spatialite-adapter, activerecord-simpledb-adapter

我的Gemfile文件长这样:

source 'http://rubygems.org'
gem 'rails', '3.1.0'  
gem 'sqlite3', '1.3.3'  
...

我正在运行Windows 7 x64操作系统。 有什么想法?
6个回答

19

好的,我找到了问题所在。我注意到我的Rails安装同时有SQLite 1.3.3和1.3.4。我把Gemfile从以下内容更改为:

gem 'sqlite3', '1.3.3'

致:

gem 'sqlite3', '1.3.4'

那样解决了问题。感谢@holger-just他们的答案中指出错误信息相关行。


1
我按照这样的方式添加了我的代码:gem 'sqlite3'。这为我解决了同样的问题 :-) - MarlonRibunal

10

3
你的错误信息中重要的部分是这段代码:
can't activate sqlite3 (~> 1.3.4), already activated sqlite3-1.3.3-x86-mingw32. Make sure all dependencies are added to Gemfile.

为了解决这个问题,你应该始终通过bundle exec运行你的命令,就像这样。
bundle exec rails generate scaffold User name:string email:string 

那么,您可以将控制权交给bundler来完全掌控您的$LOAD_PATH,这样可能会解决这些问题。

谢谢 @Holager,exec并没有解决问题,但你指出了错误信息中相关行。这帮助我解决了问题。 - Ohad Horesh

2

在 Rails 教程中,也运行了:

  $ rake db:migrate

收到以下错误信息:

请安装sqlite3适配器: gem install activerecord-sqlite3-adapter (sqlite3不是bundle的一部分。将其添加到Gemfile中)。

运行:

$ gem install activerecord-sqlite3-adapter

得到:

错误:在任何存储库中都找不到有效的gem 'activerecord-sqlite3-adapter' (>= 0)

根据以上答案更改Gemfile:

gem 'sqlite3', '1.3.4'

出现了另一个错误,因此必须安装:

$ gem install sqlite3 -v '1.3.4'

尝试再次运行 $ rake db:migrate,但出现了另一个错误,这一次类似于上面的答案:
请安装 sqlite3 适配器:gem install activerecord-sqlite3-adapter(无法激活 sqlite3(〜>1.3.5),已经激活 sqlite3-1.3.4。确保所有依赖项都添加到 Gemfile 中。)
因此将 Gemfile 更改为:

gem 'sqlite3','1.3.5'

然后得到另一个错误消息,要确保“gem install sqlite3 -v '1.3.5'”成功安装(什么鬼?!好吧,再来一遍)。成功安装后,运行 bundle install。
尝试运行:
$ rake db:migrate

没有任何反应,因此尝试了:

$ bundle exec rails generate scaffold User name:string email:string

根据上面的另一个建议,最终成功了。教程警告设置过程很费力,但我觉得我必须从至少5个其他人那里混合搭配。希望这能帮助下一个人。


2
代替
gem install activerecord-sqlite3-adapter

运行

gem install sqlite3

2
我也遇到了这个错误,但我的问题略有不同。 问题在于sqlite3-ruby已经被弃用,将被sqlite3取代。在迈克尔·哈特尔的网络广播中,他仍然使用旧版的sqlite3-ruby。
我编辑了gemfile,使用sqlite 1.3.4代替sqlite3-ruby 1.3.1。 重新运行bundle install,问题解决了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接