Ruby on Rails - “向你的Gemfile添加'gem sqlite3''”

时间:2013-06-27 18:40:12

标签: ruby-on-rails ruby sqlite ruby-on-rails-4 ruby-2.0

我是Rails的完整n00b,只有Ruby的初学者知识。在我真正学习Rails之前,我计划更多地研究Ruby,但是我对自己的好处太过好奇。

无论如何,我正在按照教程进行操作,但是当它在博客目录中输入“rails server”时我就卡住了。它声明,“为数据库适配器指定'sqlite3',但未加载gem。将gem 'sqlite3'添加到您的Gemfile中。”所以我退出服务器,安装了sqlite3,恢复了服务器......只是为了再次收到此消息。当我执行“gem list”时sqlite3没有显示,但我确实在我的Root Ruby目录中看到了该文件夹。

如果有帮助,我得到了Ruby 2.0,Rails 4.0,sqlite3 1.3.7

我很抱歉,如果已经在其他地方回答了这个问题,但我在庞大的数据库堆栈流中找不到任何东西。如果您愿意提供任何耐心,我将不胜感激。

非常感谢! hewhocomes

11 个答案:

答案 0 :(得分:20)

即使在确认我的gemfile有gem 'sqlite3'之后,我在您的问题中指定的相同版本的Ruby / Rails / SQLite也出现此错误。我不知道你有什么操作系统(这可能是你被投票的原因)但我使用的是Windows 7 x64。

为了在我的Rails应用程序中安装gem,我需要编辑 Gemfile.lock 文件,将sqlite3 (1.3.7-x86-mingw32)替换为sqlite3 (1.3.7)

然后,在运行bundle install之后我终于在输出中看到了

Using sqlite3 (1.3.7)

运行rails服务器后,我(最后)看到“欢迎登陆”页面。

答案 1 :(得分:12)

我在x64 win 7上遇到了同样的问题。

解决方案(对我来说):

1)安装sqlite3

  

gem install sqlite3

2)检查已安装的版本

  

gem list sqlite3

它给了我:sqlite3(1.3.8 x64-mingw32)

3)修改Gemfile.lock

我用'sqlite3(1.3.8-x64-mingw32)更改“sqlite3(1.3.8-x86-mingw32)”

它有效:)请注意,您需要在Gemfile.lock中的版本号和x64之间添加“ - ”

XMASS

答案 2 :(得分:9)

就我而言,当我生成新的Rails应用程序后立即运行"Specified 'sqlite3' for database adapter, but the gem is not loaded. Add gem 'sqlite3' to your Gemfile."时,出现了此错误rails server消息。是Rails 4.1.16版(Ruby 2.3.1版)

gem 'sqlite3', '~> 1.3.0'

Gemfile中的这一行删除了错误消息。我认为新的sqlite宝石(1.4版)与旧的Rails(4.1版)存在冲突,但我在其Github存储库中未发现任何相关问题。我在此处添加此答案,因为它可能会帮助遇到我所遇到的相同情况的任何人。

答案 3 :(得分:5)

  1. 不要创建另一个全局数据库,然后使sqlite3特定于gem文件中的环境。
  2. 使用以前的宝石。
  3. 确保您运行bundle install,然后bundle update,最后bundle install
  4. 您的Gemfile可能包含以下条目:

    group :development, :production do
      gem 'pg', '0.15.1'
    end
    
    group :test do
      gem 'sqlite3', '1.3.6'
    end
    

答案 4 :(得分:3)

问题解决了!

事实证明,这是几个不同的问题:

  1. 我之前忽略了需要安装sqlite3才能运行,如rubyonrails.org的入门指南中所述。该指南给了我一个sqlite.com的链接,我需要从中下载命令shell和dll,两者都在“Windows的预编译二进制文件”下。更多内容如下。

  2. gem install给了我一个错误,声明无法从rubygems.org下载任何东西。事实证明,我不知道有一个新版本的rubygems。修复了gem update --system。

  3. 我尝试过gem install sqlite3 --platform = ruby​​,但无济于事。它无法构建原生扩展,也无法找到sqlite3.h。

  4. 我也在ruby-forums上问了我的问题。 http://www.ruby-forum.com/topic/4415126 在这里,Joel Pearson(virtuoso)通过附件提供了我需要的丢失文件,因为sqlite.com中没有提供这些文件。我按照他的指示,包括将shell和dll文件放在我的根目录Ruby的bin目录中......它工作正常!

  5. 基本上,我能够在不修改任何Gemfile或Gemfile.lock的情况下安装sqlite3。我的宝石列表显示sqlite3(1.3.7),Rails的欢迎屏幕现在显示为入门指南显示! 我使用Windows 7-64位,Ruby 2.0,Rails 4.0,现在我得到了sqlite3 1.3.7。

    非常感谢大家提供这个n00b建议和方向。我发现已经探索过Gemfiles以及我的root Ruby目录,我理解Ruby和Rails如何更好地适应我的计算机。

    作为初学者,我建议能够在rubyonrails.org的入门指南和sqlite.com上下载在Windows上安装它所需的sqlite3文件和文件夹。

    再次感谢! hewhocomes

答案 5 :(得分:3)

对我而言,它有助于将gem 'sqlite3'之后的版本放入gemfile中,因此它变为gem 'sqlite3', '1.3.7'。 以前我试过编译sqlite3,更新gem等... Rails无法“接受”它,所以最终定义版本有帮助。

答案 6 :(得分:2)

为我工作sudo apt-get install libsqlite3-dev

答案 7 :(得分:1)

按以下顺序运行命令

sudo apt-get install libsqlite3-dev

sudo gem install sqlite3-ruby

gem list

此命令后,您将看到以下版本的sqlite

sqlite3(1.3.12)

sqlite3-ruby(1.3.3)

答案 8 :(得分:0)

只需将此行添加到您的Gemfile中,该文件位于应用程序的根文件夹中

  gem 'sqlite3'

答案 9 :(得分:0)

对于遇到此错误的任何人来说,这是一个小而重要的旁注。在1.4版之前,Bundler无法理解Windows上的64位宝石(https://github.com/bundler/bundler/issues/2658),这解释了为什么32位版本出现在Gemfile.lock中。

手动更改:

"sqlite3 (1.3.8-x86-mingw32" to "sqlite3 (1.3.8-x64-mingw32)"

如果您使用旧版本的bundler,则

有效。如果升级,Bundler应该能够自动解决问题(1.5.2目前适用于我)。

答案 10 :(得分:0)

this post

上找到了另一种可能的解决方案

我已经安装了sqlite,但显然自2019年2月4日以来,sqlite3 v1.4.0 gem出现了问题。

同时,您可以通过将该版本添加到Gemfile中的“ sqlite3”行来回退至v1.3.6,如下所示:

gem "sqlite3", "~> 1.3.6”

希望这可以节省时间!