web-dev-qa-db-fra.com

bcrypt LoadError: impossible de charger un tel fichier

J'essaie de configurer une fonction de connexion pour mon application Rails. Un message d'erreur bcrypt s'affiche lorsque j'appuie sur le bouton de connexion:

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

Est-ce que quelqu'un d'autre a cette erreur? J'ai la dernière version de bcrypt et je suis exactement ce que le tutoriel m'a dit de faire.

Modèle d'utilisateur: J'ai mis des astérisques autour de la ligne où l'erreur est supposée être.

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

Contrôleur de sessions:

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'

Sessions/nouvelle vue:

<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>
26
Joe Morano

Si vous avez exécuté: bundle install .__ pour installer bcrypt, redémarrez le serveur Rails. Cela a fonctionné pour moi.

65
Bruno Paulino

assurez-vous non seulement que vous exécutez l'installation du paquet, mais également que vous supprimez le serveur et le rechargez pour vous assurer qu'il se charge ensuite dans les nouveaux gems. vous pouvez également consulter votre fichier gem pour le «printemps». si c'est aussi chargé, vous voudrez peut-être commenter, recharger le serveur et l'essayer ensuite. cela devrait prendre en charge toutes les possibilités.

11
Shaun Sweet

Tuer le processus printanier et redémarrer Guard a résolu le problème pour moi:

$ ps aux | grep spring

a renvoyé quatre processus printaniers:

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 
...
...

tuer (un par un):

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

et redémarrer:

$ bundle exec guard

Pour une explication intéressante, voir le didacticiel Rails de Michael Hartl https://www.railstutorial.org/book/static_pages#aside-processes

1
Arta

J'avais le même problème, mais je ne pouvais pas le résoudre avant d'éditer le fichier Gemfile et de décommenter la ligne.

    gem 'bcrypt', '~> 3.1.7' 

J'ai initialement installé la version 3.1.7 car je craignais des problèmes de compatibilité avec les versions ultérieures, basés sur quelque chose que j'ai lu dans une autre solution à ce problème, mais 3.1.7 a également échoué avec un autre message d'erreur. Cependant, 3.1.11 fonctionnait parfaitement et j’ai donc ajouté le commentaire dans le fichier Gemfile comme suit:

    gem 'bcrypt', '~> 3.1.11

et a exécuté le paquet installer encore… .. Cela a fonctionné.

0
Graeme Campbell