アラフォーがお金持ちになるためエンジニアになったブログ

お金も根性も学歴もないアラフォーまきのがエンジニアになってお金持ち目指すよ!

侍エンジニア塾 休学なう5

どうも、アラフォーまきのです。



昨晩Macちゃんが体調不良になり今朝までバタバタしてましたが、いとまずこの1週間もぼちぼち勧められたので進捗をば。

application.jsの罠

Bootstrapのアコーディオンとか実装してました。





スマホサイズになった時、全部の情報が丸出しだと、やっぱりちょっとうるさいかんじがするので。




ただ、以前試しに本番環境で実装してみたときは、ちゃんとアコーディオン仕事してくれてたのに、今回改めてやってみたら開いても閉じなくて。




いろいろ調べたところ、とんだ誤解をしていたみたい。





結論をさきにいうと、いろんなページで仕事してもらうpopoverとタイムラインっぽいもののJSコードをapplication.jsにかいちゃって、それを読ませようとしていたのが原因。





実は、viewやcontrollerみたいに、不特定多数のページに効かせたいJSについてはapplication.jsに書くんだとおもっちゃってた。





で、そこに書いたのを読み込みしてねと以下のようにhtml.erbに書いてた。

<%= javascript_include_tag 'application.js' %>

これを書いていたhtml.erbのものは、全てアコーディオンとかドロップダウンが仕事してなかった。




いくら調べても、いろいろ試してもうまくいかなかったんだけど、そのうちちゃんとアコーディオンとかドロップダウンが働いてるページと、そうでないページがあることに気がついた。




だから、それらの共通点は何か?を確認したら、仕事しないコードは全て

<%= javascript_include_tag 'application.js' %>

が書いてあった。





直感的に「こいつだな…」と思ったので、popoverとタイムライン用にそれぞれファイルを作って切り分け。





そしたらうごいたよー!





マニフェストファイルとはなんなのか、とか、なぜそこに書いて読み込みにいっちゃいけないのかとかはまだ調べてないので、ちゃんと調べて確認する予定です。





//= require rails-ujsの罠

いやそもそもこいつなんなのかって詳しいことわかってなかった。




いろんなエラーにぶつかるたび、Chromeの検証なんかをみたりするけれど、その時にいつからかrails-ujs has already been loaded!っていうエラーが出ていた。





動作的には問題なさそうなんだけれど、やっぱり気持ち悪くて色々調べていたらこんな記事を発見。

qiita.com




これに従って一旦application.jsから//= require rails-ujsを削除。





見事エラーが消えた!やったー!




…と思ったら。


アプリからログアウトできなくなった。
ルーティングエラーがでた。





最初はなぜルーティングエラーが出ているのかわからなかったんだけれど、調べていくうち//= require rails-ujsを削除していたからだとわかった。


参考にしたのがこちら。

teratail.com



//= require rails-ujsがあるおかげで、リクエストメソッドのdeleteが効くんだそう。




検証でのエラーをつぶすために削除したもののおかげで、リクエストメソッドがちゃんと飛ばずにログアウトできなくなるとは思いもしなかったw



deviseのregistrations updateのredirect先

プロトタイプの時に気がつけたはずなのに全然気がついてなかった。




認証周りはdeviseを使っているのだけれど、その内容の更新に当たるregistrationsで、実際にupdateしたあとのredirect先ってrootになってるんだね。





rootは非ログインユーザーがみられるページなので、逆にログインユーザーには非表示になるよう、プロトタイプではforbid_login_userbefore_actionで設定していた。




だから、registrationsでupdateしたあとrootに飛ぶと「すでにログイン済みです」とフラッシュが焚かれて、mypageに戻る。




めっちゃフラッシュ出てるのに、rootに飛ばされていたと全く気がついてなかった…w
「あーマイページにもどった。よかった」と、表面だけみて安心しちゃってた。



フラッシュとは一体なんだったのかw





で、今回の本番環境では、forbid_login_userを実装し忘れていたので、普通にrootにもどっちゃって「なんでじゃ」ってなってたという。





GitHubをみてみたら、registrations_controllerを作ってオーバーライドするか、ルーティングをいじるかすればいいよと書いてあった。

github.com



わたし的には後者が圧倒的に楽だと感じたので、指示通りにroutes.rbへ加筆。

as :user do
    get 'mypage', :to => 'devise/registrations#edit', :as => :user_root
end


想定する動作としては

get 'mypage' => 'mypage#index'

へ戻ってきてほしいとうことなので、GitHubではget 'users'だったところをget 'mypage'に。





これでちゃんと想定通りになってくれた。よかった。


さて

休学は4/7までです。
次回&最終回の侍塾は4/9予定でしたが、その日彼が仕事休みで在宅だとわかったので、リスケ相談中です。




あと、昨晩わたしのかわいいMacさんがおかしな動きをして、そりゃもう生きた心地がしないという事件が発生していました。




Caps Lockしていないのに英大文字になる

shiftを押していないのにshift押下時の記号が入力される

ブラウザの横幅だけを広げようとしたら、上下の高さも変わっちゃう

ショートカットキーが仕事しない

⌘+Sで保存はできそうだったけれど、上書きじゃなくて名前をつけて保存しようとする




色々調べてもうまい解決方法がみつからず、Appleサポートさんに予約入れて、今朝電話でやりとり。




おねえさんが超丁寧に、よく話を聞いていろいろサポートしてくれたけれど…解決できず。





致し方なく、お姉さんに新宿にあるビックロ内の正規代理店による対面サポ予約をお願いし、行ってきました。




おっちゃんが対応してくれたんですが、結論からいうと右側のshift キーがめり込んでいて、おしっぱになっているせいで誤動作を引き起こしていたそうな。




とりあえず動く状態にしてくれました。
ありがとうAppleおじさん!



Appleおじさんがいうには、今は動くようになったけれど、再発の可能性があるのでキーボードは交換した方がいいとのこと。





この修理は無償で、1週間〜10日寛前後かかるそう。



とりあえず、現在の作品を完成させることと、ちゃんとしたバックアップのため、Time Machineを利用するにあたり外付けHDDを購入することが目下の目標となりました。





しかたない、ここは物理的に仕事を増やすしかないな。
やりましょう、仕事してやりますよ。




かわいいMacさんにこれ以上苦しい思いさせたくないから
ね。



それにしても、昨晩は本当に不安でしかたなかったので、無事使えるようになって本当によかった。





かわいいMacさんがとりあえず生還したので、引き続きコードかきます。



では、また来週!