Rails Gem :: LoadError в UsersController # new - PullRequest
0 голосов
/ 10 марта 2012

Впервые в Ruby on Rails и возникли проблемы при следовании руководству Майкла Хартла. Я использую Rails 3.2.2 с Ruby 1.9.3.Эта проблема выглядит очень похоже на другой вопрос, который был поднят, но остался без ответа: Ошибка Rails NoMethodError в UsersController # show error

При попытке добавить нового пользователя через / signup появляется следующая ошибка

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-ruby и использованием метода has_secure_password в пользователе.rb.Удаление вызова has_secure_password в user.rb избавляет от ошибки и успешно переходит на страницу регистрации.

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+\-.]+@[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-ruby.В 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

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012

Я прошёл тот же урок и столкнулся с точно такой же проблемой.

Моим решением было перезапустить веб-сервер. После установки гема, я думаю, что веб-сервер необходимо перезапустить, чтобы он загрузился.

Justin

0 голосов
/ 04 октября 2012

Перезапуск веб-сервера исправил это для меня (в фоновом режиме работал spork для ускорения выполнения тестов)

0 голосов
/ 10 марта 2012

Пробовали ли вы команду 'bundle update', обычно упаковщик позаботится о драгоценных камнях, если вы указали в Gemfile.Если вы хотите проверить зависимость от гемов, пожалуйста, отметьте http://rubygems.org/gems.

И если вы используете Windows (я знаю, это странно, но некоторые из наших приложений работают только в Windows), есть некоторые приемы для установки bcrypt

Шаги по установке bcrypt.

1 Загрузите Devkit и извлеките

, вы можете скачать его здесь http://rubyinstaller.org/downloads/

2 Поместите devkit в папку jruby (вмой случай C: \ Applications \ jruby \ devkit)

3 Вам также необходимо установить ruby ​​либо 1.8.7 или 1.9 (иногда требуется перезапуск системы)

4 CD в каталог devkit

5 Запустите ruby ​​dk.rb init

6 Откройте config.yml и убедитесь, что в списке указаны обе установки jruby.Если нет, ДОБАВЬТЕ их.После завершения сохраните и закройте config.yml.

пример: - C: / Applications / jruby

7 Запустите ruby ​​dk.rb install

8 jruby -Sgem install bcrypt-ruby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...