未来永劫

メリーバッドエンドが好きです.

Heroku + Rails4.2 + Devise + Bootstrap3系列で本番環境でログアウト(Sign_out)ができない問題

環境

Heroku
Rails 4.2
devise 3.5.1
Bootstrap3.1.1

起きたこと

rails4.2 + Deviseで,本番環境のみで発生するエラーです.

$git push heroku master

でHerokuにデプロイし,

$heroku open

でアプリケーションを立ち上げる.

Deviseの機能を用いて正常にログインはできていたのだが,ここでサインアウトを選択すると

The page you were looking for doesn't exist.
You may have mistyped the address or the page may have moved.
If you are the application owner check the logs for more information.

という内容のエラーが出る.

$rails s

でローカルで立ち上げた場合は正常にサインアウトができていた. 何だこれ?

解決策

JavaScriptが正常に読み込まれていないのが原因であった.
ローカルにpublic/assetsディレクトリが存在している場合は容赦なく

$rm -rf public/assets

を用いて削除する.

ここで再び,

$git add .
$git commit -m "[コミット内容]"
$git push heroku master

の手順でherokuにデプロイし,

$heroku open

で立ち上げる.

再び同じエラーが起きたが,今度はWebインスペクタを参照すると,

[Error] bootstrap-datetimepicker requires jQuery to be loaded first (undefined, line 0) 

という内容のエラーが出ていた.
jQueryをbootstrapより先にロードしてね」と言われているようなので,
app/assets/javascript/application.js 内で

//= require jquery 
//= require jquery_ujs 

の2行を他のリクエストよりも優先的(先頭)に記述し直した.

再び,

$git add .
$git commit -m "[コミット内容]"
$git push heroku master

の手順でherokuにデプロイし,

$heroku open

で立ち上げると,今度は無事に成功!

scaffoldのdeleteが正常に行われない時や,
Railsで意図しない挙動を示している場合にはWebインスペクタの確認と,Javascript関連を当たってみると良いかもしれない.

(今回の場合で)やっちゃダメなこと

$git push heroku master

を行うと,自動的に
assets precompileしたのと同じになるらしい.
従って,あまり安易に

rake assets:precompile

するのは控えた方が良いかもしれない.