はじめに
この記事の内容はSintaraでの開発中、rack-flash3を使ってフラッシュを表示させようとした時に発生した下記エラー、
Rack::Flash::SessionUnavailable at /
Rack::Flash depends on session middleware.
の解決方法について学んだ事を記しています。
解決への道のり
エラーを出したソースコードはこちら↓
require "rack-flash"
use Rack::Flash
エラー文は***Rack::Flashのセッションが利用できません、Rack::Flashはセッションミドルウェアに依存していますよ!***ってな感じに訳せるかと思います。
という事でメンターさんにも聞いたりもしつつ、いろいろ調べて、READMEを見ていたら、ヒントがありました!
If you're using Sinatra, you can use the flash hash just like in Rails:
(訳)Sinatraで使うとRailsと同じようにフラッシュハッシュを使えますよー、だと思う
#省略
require 'rack-flash'
省略
enable :sessions
use Rack::Flash
#省略
enable :sessions
のところがセッションというワードが出てきてます、もしかしてこれ?
enable :sessions
とは、、、
実はSinatraではデフォルトでRackのセッション機能は無効化されているらしいです、
そして、enable :sessions
はセッションを有効にするための指定らしいです!
なるほどおお、絶対これだ!と思い、問題のコードに書き加えてページ更新してみました、、、がまたもエラー!
どうやら、、、
サーバーを再起動しないとなおりません!
この事に気づかず、僕はここからまた迷走してました笑
サーバーを再起動して無事解決〜♪
考察、学び
- おそらく、Rack-flashはセッションを使ってフラッシュを保存している
- Sinatraはセッション機能が無効化されていて、
enable :sessions
を書いてサーバーを再起動しないと有効化されない - 再起動をしてみる、という事の大事さ
勉強になりました!