LoginSignup
6

More than 5 years have passed since last update.

rails consoleでコマンド実行時のbcryptに関するエラーとその対処法

Posted at

Ruby on Railsの勉強としてrailsチュートリアルを進めていたのですが、
7章付近で詰まったので経緯をメモしておく。

ざっくりrailsチュートリアルについて

このチュートリアルでは、
Twitterもどきみたいなミニポストアプリケーションを作成しながら、railsアプリケーション作成の基本的な流れを抑えるのがゴールとなっていて、
その中にはユーザー登録、ログイン機能の実装も当然含まれます。
パスワードを安全に管理する必要があるわけでして、
そのためにbcryptライブラリをgemでインストールして使用します。

手順

インストール手順自体はものすごく簡単です。
Gemfileに追加したいライブラリとそのバージョンを追加してコマンドを実行するだけ。

Gemfile
source 'https://rubygems.org'

gem 'rails',        '5.0.0.1'

gem 'bcrypt',         '3.1.11' #追加
.
.
.
$ bundle install

これ自体は他の言語にもあるので難しいものではないです。Composerとか。

bcryptがあるのにないと言われる

インストール完了後、rails consoleというrailsの対話ツールを開き、コードを実行しようとした時でした。

>> user = User.first
You don't have bcrypt installed in your application. Please add it to your Gemfile and run bundle install
.
.
.

・・・なんでやねん。
間違いなくGemfileにbcrypt書き加えてインストールしたんだけどなあ。
調べてみると、おなじようにチュートリアルを進め、嵌った方がたくさんいらっしゃって、
「Weblickの再起動」など色々載っていたのですが、解決には至りませんでした。

解決策

色々みているうち、Gemfile.lockにbcryptが記述されていないことに気がついた。
Gemfile.lockについては参考を参照して頂きたいのですが、
要は

「bcryptの依存性を解決しないまま実行しようとした」

ということなんだと思います。たぶん。
なぜ最初のインストール時に実行されなかったのは謎ですが、
しょうがないので、bcryptを再インストールしました。
手順は以下です。

  • gemfileからbcryptの箇所をコメントアウトする
  • bundle installする
  • コメントアウトを解除して再度bundle installする

こうしたら、

$ rails console
Running via Spring preloader in process 1744
Loading development environment (Rails 5.0.0.1)
>> user = User.first
  User Load (0.4ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2017-02-07 07:18:22", updated_at: "2017-02-07 13:40:30", password_digest: "*************">
>>

ちゃんと実行されました。よかった。

・・・ただ、これが根本的な解決要因だったかと言われると、微妙なので、他の対処法も調べてみることをお勧めします。
幸い情報はたくさんありますので。

参考

bcryptについて
BCrypt(Blowfish暗号)について調べたので文書化してみました

Gemfile, Gemfile.lockについては以下が参考になります。
GemfileとGemfile.lockの簡単なお話
Gemfile | Bundler日本語ドキュメント | Ruby STUDIO
Bundlerを使ったGemパッケージの管理 - Ruby on Rails入門

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6