Rails:“加载以下文件时发生此错误:bcrypt”

时间:2014-04-09 23:03:57

标签: ruby-on-rails bcrypt railstutorial.org

对downvoting的评论:这个问题被错误地标记为重复。从我附上的gemfile可以清楚地看到我使用的是更新版本的bcrypt。这个和其他的差异(我使用Ubuntu 12.04,而另一个线程提到Windows)使得其他线程的解决方案不适用于我的情况。我仍然有这个问题,欢迎任何建议。

=评论结束

我正在研究着名的Rails教程,但却陷入Listing 7.5 - 我认为我遵循了所有说明,但没有得到UserPage1我得到了bcryptError。实际的错误堆栈是:

app/models/user.rb:6:in `<class:User>'
app/models/user.rb:1:in `<top (required)>'
app/controllers/users_controller.rb:4:in `show'
This error occurred while loading the following files:
bcrypt
Request
Parameters:
{"id"=>"1"}

这是我的Gemfile:

source 'https://rubygems.org'
ruby '2.1.1'
#ruby-gemset=railstutorial_rails_4_0

gem 'rails', '4.0.4'
gem 'bootstrap-sass', '2.3.2.0'
gem 'sprockets', '2.11.0'
gem 'bcrypt-ruby', '3.1.2'

group :development, :test do
gem 'sqlite3', '1.3.8'
gem 'rspec-rails', '2.13.1'
gem 'guard-rspec', '2.5.0'
gem 'spork-rails', '4.0.0'
gem 'guard-spork', '1.5.0'
gem 'childprocess', '0.3.6'
end

group :test do
gem 'selenium-webdriver', '2.35.1'
gem 'capybara', '2.1.0'
end

gem 'sass-rails', '4.0.1'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.1'
gem 'jquery-rails', '3.0.4'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
gem 'sdoc', '0.3.20', require: false
end

这是User.rb:

class User < ActiveRecord::Base
before_save {self.email = email.downcase}
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: 6 }
end

这是routes.rb:

SampleApp::Application.routes.draw do

resources :users # replaces: get "users/new"
root  'static_pages#home'
match '/signup',  to: 'users#new',            via: 'get'
match '/help',    to: 'static_pages#help',    via: 'get'
match '/about',   to: 'static_pages#about',   via: 'get'
match '/contact', to: 'static_pages#contact', via: 'get'

end

这是user_controller.rb:

class UsersController < ApplicationController

def show
@user = User.find(params[:id])
end
def new
end
end

你能说出问题出在哪里吗?

2 个答案:

答案 0 :(得分:9)

Curiuosly,重新启动WEBrick服务器消除了这个问题。这是在系统重新启动之后系统部分升级(Ubuntu 12.04)作为对不相关问题(the Heartbleed bug)的响应之后完成的,所以我不知道是否只是WEBrick重启这消除了这个问题。

答案 1 :(得分:4)

正是WEBrick重启修复了你的问题。 rails控制台输出将显示错误:

You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install
Completed 500 Internal Server Error in 10ms

LoadError (cannot load such file -- bcrypt):

这是因为在为“A Hashed Password”安装bcrypt gem之后(本教程中的第6.3.1节),没有明确的指令来重新启动服务器。