さらっと流す。
どうも。マリンです。
Rails Tutorialも12章まで進みました。
この章をやっていてつくづく実感したことがあります。それは
「さらっと流す」ことです。
プログラミングの先輩方のお話を聞いていますと度々出てきますこの勉強テクニック。
私には実は結構ネック立たんですね。
というのも、どーーーーしても細かい部分までいちいち理解しないと気が済まないんです!
コードの端から端まで何が書かれてるのか?とか、
説明文の意味とか。
果ては日本語の意味とか(笑)
こんなことやっていてはそりゃあ進みませんよ・・・
今回気づいたこと
チュートリアルの11章と12章はやってる内容が似ています。
でも11章ははっきり言って90%くらい理解できませんでした。
しかし、まだ12章途中ですが、ここまででも75%くらいは理解できてる!気がします・・・
まぁ繰り返しだから理解できてるのもあると思いますが、
「なんで11章は理解できなかったのか?」
それを考えてみたところ、そもそも「今何をやっているのか?」
それすらわかっていなかったことに気づいたのです。
でも12章では何となく今やっていることがわかるようになりました。
その原因
その原因こそ、
「さらっと流す」
でした。
11章ではやっぱりいちいち細かいこと気にして読んでました。
そのせいで全体の流れがわからなくなっていたんですね。
全体の流れがわからない→今何やってるかわからない→わからないからわかるために一つ一つ理解しようとする→また流れを見失う
この悪循環だったわけです。
12章は前章の繰り返しということもあって結構サクサクっと進めています。
そのおかげで全体の流れや、そのコートが何のために使われていたのかが理解できました。
まとめ
ついつい「一つずつ理解しながらでないと!」と思ってしまうのですが、
「さらっと流して全体を把握」
そのことにやっと気づくことができたようです。
「理解すること」にも順序があるようですね。
2月。
今年に入ってすでに「早いなぁ〜」と感じているマリンです。
なんたってもう2月ですから。
なんで突然こんなこと思ったかと言いますと、
来週息子の1日体験入園があるんです。
11月に幼稚園の願書提出+面接があって、
「体験は2月かぁ・・・まだだいぶ先だな!」
なんて余裕こいてたらもう来週!?
ひぃ〜!30代の時の流れひぃ〜!!です(;゜0゜)
「去年の今頃はおねぇちゃんの入園準備でドキドキしてたっけ〜・・・」
なんて余裕こいて感傷に浸ってるとまた幼稚園グッズ揃えるの出遅れる!
今回こそは間際にドタバタしないようにせねば・・・
しかし、本当に早すぎますね。
二人とも生まれたのなんてつい最近に感じるのに、
気づけば息子まで幼稚園です。
1日1日を大切にって思うんですけどね(^_^;)
でも本当、目先のことに囚われて
まだ「時間ある」なんて思っていては何も成さないまま終わってしまいそうです!
せっかく気づいたことだし、
育児も勉強も後悔しないように考えを改めてみようと思います!
コピペの罠
どうもマリンです。
昨日からRails Tutorial 11章を進めています。
最初は「コードも自分で打たないと理解できん!」と意気込んで手打ちしてましたが、
ちょっと前から「とりあえず全体掴むことからじゃね?」と思い、
コピペで進めてます。
今回はこのコピペでハマったお話です。
概要
メールのプレビューを見ようとしたところ、activation_token
に対してNoMethodError
が出た。
「コピペだからコードに問題はないはず」と思い込み、小さなミスに気付かずハマってしまった。
原因
原因は細かいミスの積み重ねでした。
まず一番の原因が、Seedデータのコピペが不完全で「, 」が抜けていたことです。
「コピペだから間違ってないはず」という思い込みが発見を遅らせてしまいました。
これのせいで$ rails db:seed
をしても読み込まれていなかったんですね。
さらに$ rails db:seed
をした後も結果を完全にスルーしていました。
ここでも「当然通っているだろう」と思ってましたね。
さらに、NoMethodError
も最後に書かれているnil Nil:Class
に注目しなかったのでずっとactivation_token
の部分ばかり気にしていました。
まとめ
やはり思い込みは一番の敵ですね。
今回は完全に「コピペだから間違ってるはずない」と思い込んだことが原因でした。
1文字間違えてても動かないのがコンピューターですから、やはり思い込みは捨てて懇切丁寧に作っていくことが大切だなって身にしみました。
ターミナルを再起動せよ!
こんな話が誰かの役に立つとも思えないほどあっけない話なんですけど・・・
まぁ、一応。
概要
Gitでmasterにマージしたら突然テストが通らなくなった。
詳細
チュートリアルの10章が終わったので、最後にGitやらHerokuやらにコミットとかプッシュとかしようとした。
トピックブランチからmasterにマージし、最後にHerokuにプッシュする前にもう一度
$ rails test
したら、突然テストが通らなくなった。
エラーの内容はindexページのテストに使われてるpaginateメソッドに対し、
「そんなメソッド知らん!」との事。
対処
いろいろやってみました。コードを見直したり、gemをインストールしなおしてみたり、
なんかよくわかんないけどrails db:migrate
してみたり。
で結局全部ダメで、最後に藁をも掴む思いでターミナルを再起動したら。
治りました。。。
まぁ、なんとなくわかってたんですけどね。
1回テスト通ってるから中身の問題ではないかもと。
また無駄な時間を使ってしまったorz
ローカルサーバを停止せずにターミナルを閉じてしまいました。
概要
タイトルの通りです。
これをやったことで何が起こるかと言いますと・・・
「ターミナルを再起動した時にローカルサーバーが立ち上がらない」
という状況に陥ります。
めっちゃハマりました。
私の場合
$ rails s -b 0.0.0.0
で起動させていて、この時に出るメッセージがこちら。
Address already in use - bind(2) for "0.0.0.0" port 3000
そして調べているうちに出てきた起動方法がこちら
$ rails s Puma
この時は特にメッセージは出てこなかったのですが、
実際にブラウザで確認してみると「localhostは機能していません」
と出てしまう状況でした。
対処法
こちらを参考にさせていただきました。
RackサーバーのPumaについて調べてみる - arakaji's diary
げ!ローカルサーバーを切らずにターミナルを消しちゃった! - Qiita
具体的な解決方法
まずはこの3000が既に使われているとのことでしたので、そこを調べました。
$ lsof -i :3000
出てきた結果はこちらです。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 7620 takagimarin 12u IPv6 0x7d655025f170834b 0t0 TCP localhost:hbci (L ISTEN) ruby 7621 takagimarin 12u IPv6 0x7d655025f170834b 0t0 TCP localhost:hbci (L ISTEN) ruby 11748 takagimarin 9u IPv4 0x7d655025f47508a3 0t0 TCP *:hbci (LISTEN) rub
PID接続してるものが原因とのことでしたので、killコマンドで消しました。
$ kill -QUIT 7620 $ kill -QUIT 7621 $ kill -QUIT 11748 $ kill -QUIT 11752
これで実行できるようになりました!
まとめ
PIDについては深く調べていないので、今後ひと段落したら調べてみます。
しかしこれでたまに動かなくなっていたローカルサーバーの原因がわかったので良かったです。
ターミナルを閉じる時はきちんとサーバーを終了してからにしましょう(笑)
ちょいちょい引っかかってくるRails4.2とRails5の違い
Rails Tutorialを始めた頃、私は自分の使っているRailsが4.2なのを知らずに勉強を進めていました。 サーバーをPumaに変えるってあたりで初めて気づいたのですが・・・ そこで思い切ってRails5にアップグレードしました。 作ってる途中でこんなことするのはもちろん初めてだったので、後遺症がちょいちょい出て困ってます。
今回の概要
10章のbeforeフィルターのテストでNo route machesになった。
対処
beforeフィルターのテストをusers_controller_test.rbに書くのですが、
ここのclassがclass UsersControllerTest < ActionController::TestCase
のままだったせいで、
get edit_user_path
とpatch user_path
がそんなルーティング設定されてないと怒られてしまいました。
ルーティングの方だということで確認したのですが、間違いなく設定はされていました。
users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy
全然わからなかったので、とりあえず教材のコードとめっちゃ見比べました。
コピペだから間違ってるはずないのに・・・と思いながら(笑)
そしてとうとうこの間違いに気づいたのですね!
classをclass UsersControllerTest < ActionDispatch::IntegrationTest
に直したら無事成功!
とはいかず・・・
今度はコントローラを作成した際に最初から書かれている
test "should get new" do get :new assert_response :success end
が引っかかりました。
第5章まで遡って
get :new
をget signup_path
に変更。
なぜ私がこの部分を変えていなかったのかは不明ですが・・・
とりあえずこれでAll Greenになりました。
まとめ
何かをアップデートする際はきちんと仕様変更された部分を確認しましょう。
それ普通か・・・