2012-03-10 63 views
0

Ruby on Rails的新手,並且在遵循Michael Hartl的教程時遇到問題。我正在使用Rails 3.2.2和Ruby 1.9.3。這個問題看起來很相似,有人提出但沒有答案另一個問題: Rails Error NoMethodError in UsersController#show errorUsersController中的Rails Gem :: LoadError#new

試圖通過/註冊

Gem::LoadError in UsersController#new 
bcrypt-ruby is not part of the bundle. Add it to Gemfile. 

重新加載頁面添加一個新用戶時,我得到了下面的錯誤給出了錯誤:

NoMethodError in UsersController#new 
undefined method `key?' for nil:NilClass 

這個問題似乎涉及到列入bcrypt-紅寶石的寶石,並在user.rb的has_secure_password方法的使用。在user.rb中刪除對has_secure_password的調用可以消除錯誤,併成功進入註冊頁面。

user.rb:

# == Schema Information 
# 
# Table name: users 
# 
# id    :integer   not null, primary key 
# name   :string(255) 
# email   :string(255) 
# created_at  :datetime  not null 
# updated_at  :datetime  not null 
# password_digest :string(255) 
# 

class User < ActiveRecord::Base 
    attr_accessible :name, :email, :password, :password_confirmation 
    has_secure_password 

    validates :name, presence: true, length: { maximum: 50 } 
    valid_email_regex = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
    validates :email, presence: true, 
        format:  { with: valid_email_regex }, 
        uniqueness: { case_sensitive: false } 
    validates :password, length: { minimum: 6} 
end 

users_controller.rb:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 
def create 
    @user = User.new(params[:user]) 
    if @user.save 
     flash[:success] = "Welcome!" 
     redirect_to @user 
    else 
     render 'new' 
    end 
    end 
end 

但是,我找不到什麼毛病列入bcrypt-紅寶石寶石。在我的Gemfile有:

gem 'bcrypt-ruby', '3.0.1' 

和創業板也已在Gemfile.lock的產生:

DEPENDENCIES 
    annotate (~> 2.4.1.beta) 
    bcrypt-ruby (= 3.0.1) 

我還通過遷移增加password_digest到數據庫:

class AddPasswordDigestToUsers < ActiveRecord::Migration 
    def change 
    add_column :users, :password_digest, :string 

    end 
end 

有什麼建議嗎?

+0

用最簡單的可能的解釋開始,你有沒有重新啓動服務器後加入bcrypt-ruby到Gemfile? – danivovich 2012-03-10 17:22:40

+0

嗨,是的,我已經重新啓動服務器,因爲添加了bcrypt。 (在本地主機上使用WEBrick服務器) – ds123 2012-03-10 17:56:17

回答

0

您是否嘗試過「軟件包更新」命令,如果您在Gemfile中指定,通常打包程序會照顧寶石。如果你想檢查寶石依賴項,請檢查http://rubygems.org/gems

如果你使用的是Windows(我知道它strange-但僅適用於Windows的一些我們的應用程序的作品)有一些技巧來安裝bcrypt

步驟安裝bcrypt。

1下載的devkit和提取

你可以從這裏下載http://rubyinstaller.org/downloads/

2將的devkit它你的JRuby文件夾(在我的情況下,C:\應用程序\ JRuby中\的devkit)

3你需要安裝紅寶石以及1.8.7或1.9(有時需要系統重啓)

4 CD到devkit目錄

5運行ruby dk.rb init

6打開config.yml並確保列出了您的jruby installtion。如果沒有,請添加它們。完成後保存並關閉config.yml。

例如: - C:/應用/ jruby的

7執行紅寶石dk.rb安裝

8的jruby -S寶石安裝bcrypt旁註

+0

最初嘗試捆綁安裝(雖然我在嘗試更新時還排除故障),我也使用64位Windows。不使用jruby,而是重新安裝用於Ruby安裝的devkit,重新安裝gem(並重新啓動!)似乎已經解決了這個問題。謝謝你的幫助。 – ds123 2012-03-11 18:56:02

3

我要去通過相同的教程和遇到了完全相同的問題。

我的解決方案是重新啓動Web服務器。安裝好gem之後,我認爲web服務器需要重新啓動才能加載。

賈斯汀

+0

這是我的答案。 – 2012-07-02 21:30:02

0

重新啓動Web服務器固定它,我(有叉勺在後臺運行,加快測試的運行)

+1

但是OP表示他已經嘗試重新啓動。 – 2012-10-04 15:57:16

相關問題