web-dev-qa-db-ger.com

bcrypt LoadError: Diese Datei kann nicht geladen werden

Ich versuche, eine Login-Funktion für meine Rails-App einzurichten. Wenn ich auf die Login-Schaltfläche drücke, wird eine bcrypt-Fehlermeldung angezeigt:

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

Bekommt jemand anderes diesen Fehler? Ich habe die neueste Version von bcrypt und verfolge genau das, was mir das Tutorial empfohlen hat.

User Model: Ich habe Sternchen um die Zeile gesetzt, wo der Fehler angeblich liegt.

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

Sessions Controller:

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

SitzungenHelper:

module SessionsHelper

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

Gemfile:

gem 'bcrypt', '~> 3.1.7'

Sitzungen/neue Ansicht:

<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

Wenn Sie: bundle install Installiert haben, um bcrypt zu installieren, starten Sie einfach den Rails-Server neu. Es hat für mich funktioniert.

65
Bruno Paulino

stellen Sie sicher, dass Sie nicht nur die Bundle-Installation ausführen, sondern auch den Server beenden und neu laden, um sicherzustellen, dass er in die neuen Gems geladen wird. Sie können Ihr Gemfile auch auf "Frühling" überprüfen. Wenn das auch geladen ist, sollten Sie das kommentieren, den Server neu laden und es dann versuchen. das sollte alle Möglichkeiten berücksichtigen.

11
Shaun Sweet

Den Frühlingsprozess zu töten und Guard neu zu starten, hat das Problem für mich gelöst:

$ ps aux | grep spring

vier Federprozesse zurückgegeben:

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

töte (eins nach dem anderen):

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

und neu starten:

$ bundle exec guard

Eine schöne Erklärung finden Sie in Michael Hartls Rails Tutorial https://www.railstutorial.org/book/static_pages#aside-processes

1
Arta

Ich hatte das gleiche Problem, konnte es aber nicht lösen, bis ich die Gemfile-Datei bearbeitet und die Zeile unkommentiert hatte

    gem 'bcrypt', '~> 3.1.7' 

Ich habe ursprünglich Version 3.1.7 installiert, weil ich mir Sorgen machte, ob es möglicherweise Kompatibilitätsprobleme mit den späteren Versionen gab, die auf etwas basierten, das ich in einer anderen Lösung dieses Problems gelesen hatte, aber 3.1.7 schlug auch mit einer anderen Fehlermeldung fehl. 3.1.11 hat jedoch einwandfrei funktioniert, und deshalb habe ich den Kommentar in der Gemfile aufgeschoben, um ihn zu lesen

    gem 'bcrypt', '~> 3.1.11

und installierte das Bundle erneut .. Das hat funktioniert.

0
Graeme Campbell