Ruby on Railsの勉強としてrailsチュートリアルを進めていたのですが、
7章付近で詰まったので経緯をメモしておく。
##ざっくりrailsチュートリアルについて
このチュートリアルでは、
Twitterもどきみたいなミニポストアプリケーションを作成しながら、railsアプリケーション作成の基本的な流れを抑えるのがゴールとなっていて、
その中にはユーザー登録、ログイン機能の実装も当然含まれます。
パスワードを安全に管理する必要があるわけでして、
そのためにbcryptライブラリをgemでインストールして使用します。
##手順
インストール手順自体はものすごく簡単です。
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入門