Подтвердить что ты не робот

Bcrypt LoadError: невозможно загрузить такой файл

Я пытаюсь настроить функцию входа для моего приложения Rails, я получаю сообщение об ошибке bcrypt при нажатии кнопки входа в систему:

LoadError in SessionsController#create
cannot load such file -- bcrypt

Кто-нибудь еще получает эту ошибку? У меня есть последняя версия bcrypt, и я слежу за тем, что мне посоветовало сделать.

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

class User < ActiveRecord::Base
  ****has_secure_password****
end

Контроллер сеансов:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(id: params[session][:id])
    if user && user.authenticate(params[:session][:password])
      log_in user
      redirect_to root_path
    else
      flash.now[:danger] = 'Invalid'
      render 'new'
    end
  end

  def destroy
  end
end

ApplicationController:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  include SessionsHelper
end

SessionsHelper:

module SessionsHelper

  def log_in(user)
    session[:user_id] = user.id
  end
end

Gemfile:

gem 'bcrypt', '~> 3.1.7'

Сессии/новый вид:

<div id= "admin-sign-in">
  <%= form_for(:session, url: login_path) do |f| %>

    <%= f.label :id %>
    <%= f.text_field :id %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.submit "Log in", class: "btn btn-primary" %>
  <% end %>
</div>
4b9b3361

Ответ 1

после запуска bundle install для установки bcrypt, не забудьте перезапустить сервер rails.
Это сработало для меня.

Ответ 2

убедитесь, что вы не только запускаете установку пакета, но и ТАКЖЕ убиваете сервер и перезагружаете его, чтобы он загружался в новые драгоценные камни. вы также можете проверить свой gemfile на "spring". если они тоже загружены, вы захотите это прокомментировать, перезагрузите сервер и попробуйте. который должен заботиться обо всех возможностях.

Ответ 3

Убийство spring процесс и перезапуск Guard решили проблему для меня:

$ ps aux | grep spring

возвращено четыре процесса spring:

ubuntu     11526  0.0  0.0 298748 24348 pts/1    Sl   22:08   0:00 spring server | mh03_sample_app | started 16 mins ago
ubuntu     11529  0.4  0.1 531764 79204 ?        Ssl  22:08   0:04 spring app    | mh03_sample_app | started 16 mins ago | test mode 
...
...

kill (один за другим):

$ kill -15 11526
$ kill -15 11529
$ kill ... 
$ kill ...

и перезапустите:

$ bundle exec guard

Для приятного объяснения см. учебник Michael Hartl Rails https://www.railstutorial.org/book/static_pages#aside-processes

Ответ 4

У меня была такая же проблема, но я не смог ее решить, пока не отредактировал файл Gemfile, и раскомментировал строку

    gem 'bcrypt', '~> 3.1.7' 

Я изначально установил версию 3.1.7, потому что я был обеспокоен, если были проблемы с совместимостью с более поздними версиями, на основе чего-то, что я прочитал в другом решении этой проблемы, но 3.1.7 также не удалось с другим сообщением об ошибке. Тем не менее, 3.1.11 работал отлично, и поэтому я столкнулся с комментарием в Gemfile, чтобы прочитать

    gem 'bcrypt', '~> 3.1.11

и снова запустить пакет. Это сработало.