无法让我的Ruby on Rails项目创建数据库

5
这可能是一个新手设置问题。但是我们来看看...
机器设置
我有一台运行rails 4.0.0和ruby 2.0.0的Windows 7 64位机器。 我在我的路径中有以下内容:
C:\Ruby200-x64\bin;C:\RubyDevKit\bin;C:\RubyDevKit\mingw\bin;

项目设置

我正在使用同事的工作库克隆的 git 项目中工作。

当我运行初始命令时:

rake db:migrate

我得到了以下错误信息:
rake aborted!
Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 's
qlite3'` to your Gemfile.
C:/Working/mynewproject/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

我的Gemfile中包含了如下的gem 'sqlite3'


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

完整的Gemfile如下:
source 'https://rubygems.org'

ruby '2.0.0'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.0'
gem 'rails_12factor', group: :production

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

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

# Use Twitter Bootstrap for styling
gem 'bootstrap-sass'

# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'

# Use CoffeeScript for .js.coffee assets and views
gem 'coffee-rails', '~> 4.0.0'

# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'

# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
gem 'turbolinks'

# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 1.2'

group :doc do
  # bundle exec rake doc:rails generates the API under doc/api.
  gem 'sdoc', require: false
end

# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

gem 'protected_attributes' # should probably use strong parameters!

当我运行bundle install时,我得到了以下列表-请注意sqlite3的缺失。
Using rake (10.1.0)
Using i18n (0.6.5)
Using minitest (4.7.5)
Using multi_json (1.7.9)
Using atomic (1.1.13)
Using thread_safe (0.1.2)
Using tzinfo (0.3.37)
Using activesupport (4.0.0)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.0)
Using mime-types (1.25)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (4.0.0)
Using activemodel (4.0.0)
Using activerecord-deprecated_finders (1.0.3)
Using arel (4.0.0)
Using activerecord (4.0.0)
Using sass (3.2.10)
Using bootstrap-sass (2.3.2.2)
Using coffee-script-source (1.6.3)
Using execjs (2.0.1)
Using coffee-script (2.2.0)
Using thor (0.18.1)
Using railties (4.0.0)
Using coffee-rails (4.0.0)
Using hike (1.2.3)
Using jbuilder (1.5.1)
Using jquery-rails (3.0.4)
Using json (1.8.0)
Using protected_attributes (1.0.3)
Using bundler (1.3.5)
Using tilt (1.4.1)
Using sprockets (2.10.0)
Using sprockets-rails (2.0.0)
Using rails (4.0.0)
Using rails_serve_static_assets (0.0.1)
Using rails_stdout_logging (0.0.2)
Using rails_12factor (0.0.2)
Using rdoc (3.12.2)
Using sass-rails (4.0.0)
Using sdoc (0.3.20)
Using turbolinks (1.3.0)
Using uglifier (2.2.1)
Your bundle is complete!

当我运行bundle show 'sqlite3'时,会得到以下结果:
Could not find gem 'sqlite3'.
Did you mean sqlite3?

当我执行gem install 'sqlite3'命令时,我会得到以下结果:
Successfully installed sqlite3-1.3.8-x64-mingw32
Parsing documentation for sqlite3-1.3.8-x64-mingw32
unable to convert "\x90" from ASCII-8BIT to UTF-8 for lib/sqlite3/2.0/sqlite3_native.so, skipping
1 gem installed

在搜索了关于“无法转换”的错误后,我发现可以不安装文档进行安装。因此,如果我这样做,

gem install 'sqlite3' --no-doc 

I get

Successfully installed sqlite3-1.3.8-x64-mingw32
1 gem installed

然后当我执行

rake db:migrate

我仍然收到

rake aborted!
Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 's
qlite3'` to your Gemfile.
C:/Working/mynewproject/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

那么,我错过了什么?

谢谢

在根据评论中提供的建议进行操作后更新:

由于 Doon 的评论,我将gemfile的内容放在了上面的问题描述中。

针对techvineet的评论,我运行了多次bundle install并获得了一致的输出结果。

由于zrl3dx的评论,我现在运行了bundle exec bundle并且获得相同的输出,即:

Using rake (10.1.0)
Using i18n (0.6.5)
Using minitest (4.7.5)
Using multi_json (1.7.9)
Using atomic (1.1.13)
Using thread_safe (0.1.2)
Using tzinfo (0.3.37)
Using activesupport (4.0.0)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.0)
Using mime-types (1.25)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (4.0.0)
Using activemodel (4.0.0)
Using activerecord-deprecated_finders (1.0.3)
Using arel (4.0.0)
Using activerecord (4.0.0)
Using sass (3.2.10)
Using bootstrap-sass (2.3.2.2)
Using coffee-script-source (1.6.3)
Using execjs (2.0.1)
Using coffee-script (2.2.0)
Using thor (0.18.1)
Using railties (4.0.0)
Using coffee-rails (4.0.0)
Using hike (1.2.3)
Using jbuilder (1.5.1)
Using jquery-rails (3.0.4)
Using json (1.8.0)
Using protected_attributes (1.0.3)
Using bundler (1.3.5)
Using tilt (1.4.1)
Using sprockets (2.10.0)
Using sprockets-rails (2.0.0)
Using rails (4.0.0)
Using rails_serve_static_assets (0.0.1)
Using rails_stdout_logging (0.0.2)
Using rails_12factor (0.0.2)
Using rdoc (3.12.2)
Using sass-rails (4.0.0)
Using sdoc (0.3.20)
Using turbolinks (1.3.0)
Using uglifier (2.2.1)
Your bundle is complete!

由于Sachin Singh的评论,我删除了Gemfile.lock并运行了bundle install。结果基本相同:

Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using rake (10.1.0)
Using i18n (0.6.5)
Using minitest (4.7.5)
Using multi_json (1.7.9)
Using atomic (1.1.13)
Using thread_safe (0.1.2)
Using tzinfo (0.3.37)
Using activesupport (4.0.0)
Using builder (3.1.4)
Using erubis (2.7.0)
Using rack (1.5.2)
Using rack-test (0.6.2)
Using actionpack (4.0.0)
Using mime-types (1.25)
Using polyglot (0.3.3)
Using treetop (1.4.15)
Using mail (2.5.4)
Using actionmailer (4.0.0)
Using activemodel (4.0.0)
Using activerecord-deprecated_finders (1.0.3)
Using arel (4.0.0)
Using activerecord (4.0.0)
Using sass (3.2.10)
Using bootstrap-sass (2.3.2.2)
Using bundler (1.3.5)
Using coffee-script-source (1.6.3)
Using execjs (2.0.1)
Using coffee-script (2.2.0)
Using thor (0.18.1)
Using railties (4.0.0)
Using coffee-rails (4.0.0)
Using hike (1.2.3)
Using jbuilder (1.5.1)
Using jquery-rails (3.0.4)
Using json (1.8.0)
Using protected_attributes (1.0.3)
Using tilt (1.4.1)
Using sprockets (2.10.0)
Using sprockets-rails (2.0.0)
Using rails (4.0.0)
Using rails_serve_static_assets (0.0.1)
Using rails_stdout_logging (0.0.2)
Using rails_12factor (0.0.2)
Using rdoc (3.12.2)
Using sass-rails (4.0.0)
Using sdoc (0.3.20)
Using turbolinks (1.3.0)
Using uglifier (2.2.1)
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

尚未提及sqlite3,运行rake db:migrate仍然会产生以下结果:

rake aborted!
Specified 'sqlite3' for database adapter, but the gem is not loaded. Add `gem 's
qlite3'` to your Gemfile.
C:/Working/its-a-disaster/config/environment.rb:5:in `<top (required)>'
Tasks: TOP => db:migrate => environment
(See full trace by running task with --trace)

作为对 Sachin Singh 的问题“ruby -v command命令的输出是什么?”的回答:
输出为:
ruby 2.0.0p247 (2013-06-27) [x64-mingw32]

rails --version会显示:

Rails 4.0.0

Prusswan问:同一台机器上是否有其他的ruby安装?

有三个版本 - 1.9.2,1.9.3和2.0.0。 后者是路径中的版本。其他两个我已经删除了。


请发布您的Gemfile,sqlite3 gem在哪里指定?它在开发组中吗? - Doon
你在指定后是否重新运行了“bundle install”命令? 只需将其包含在您的Bundle文件中,例如gem 'sqlite3',然后再次运行“bundle install”即可。 - techvineet
@SachinSingh 谢谢,我刚试了一下,还是没有提到sqlite3。 - Jane
1
同一台机器上是否有其他的 Ruby 安装? - prusswan
好的,问题解决了 - 我需要手动编辑我的gemfile.lock文件,将sqlite3 (1.3.8-x86-mingw32)更改为sqlite3 (1.3.8-x64-mingw32),参考https://dev59.com/6mUp5IYBdhLWcg3wJU9J - 所以似乎是64位与32位的问题。 - Jane
显示剩余26条评论
1个回答

8

在Bundler和64位Ruby之间存在一个已知问题,即无法检测到x64-mingw32 gem平台并将其打包,从而导致打包失败。

我相信这个问题已经在1.4.0预发布版本中得到了解决,你可以尝试执行以下命令:

gem update bundler --pre

bundle install

你可能会遇到其他与64位版本相关的问题。以下是我的个人建议:

除非你真的被迫使用超过2GB的RAM来工作或创建应用程序(很可能不是Rails应用程序),否则我建议你使用32位版本的Ruby(以及相应的DevKit)。

虽然你有64位版本的Windows,但系统完全能够运行32位应用程序而没有任何问题。在开发使用Rails的Web应用程序时,不会有明显的性能下降。

虽然Ruby 2.0.0已被标记为稳定和可用于生产环境,但并非所有的gems和相关工具都已更新以正确地与其配合使用。仍然存在一些需要解决的问题,比如Bundler和64位Ruby的情况。像大多数开源软件一样,这是一个社区努力的结果,可能需要帮助。

希望这有所帮助。


谢谢Luis。那个命令起作用了,而且还省去了我手动替换-x86-mingw32为-x64-mingw32的麻烦。 - Jane
很高兴听到 @Jane,但请记住其他推荐。你可能会遇到其他问题,因为某些宝石在 32 位版本中的表现并不如它们那么好。 - Luis Lavena

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