ターミナルを再起動せよ!
こんな話が誰かの役に立つとも思えないほどあっけない話なんですけど・・・
まぁ、一応。
概要
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になりました。
まとめ
何かをアップデートする際はきちんと仕様変更された部分を確認しましょう。
それ普通か・・・
ブログタイトル変更しました。
これまで「とりあえず発信しなきゃ!」とタイトルも考えずに始めたブログでした。
この度ブログ活用術のイベントに参加いたしましたので、タイトル変更とともに改めてプログラミングを勉強しているのはなぜか?何を目指しているのか?など「私」について書いておこうと思います。
目標
タイトルに書きましたが、アプリリリースが目標です。
そして自宅でお小遣い稼ぎがしたい!それが最終目標です!
今年の目標
直近で今年の初めに月単位で目標たてたので公開します。
『アプリを一つ作る』
- 1月 Rails Tutorialを終わらせる
- 2月
- 3月 作るアプリと概要を決める
- 4月 ペーパープロトタイプなどを作って細かい機能まで決める
- 5月 コーディング開始
- 6月 完成
2か月で完成するのかは・・・頑張ります(汗)
6月で終わってますが、その後は今後のポートフォリオのためにできるだけ多く作品を作っていきたいです。
現状
私は今プログラミングの勉強をしております。
より詳しくお話しするとRuby on Railsを勉強中です。
Rails Tutorialの9章が終わったところです。
Tutorial9.2 remember userを消し忘れてハマったお話。 - 主婦がアプリをリリースするまでの軌跡
ちょっと先週がっつりハマって時間無駄にしちゃいましたが、今日から第10章に入ります。
きっかけ
そもそも何でプログラミングに目をつけたかなんですが・・・
ちょっと恥ずかしいんですけど、子どもの頃から大好きなアメリカのSFドラマがありまして、現在のプログラミングは関係ないほど未来のお話なんですが・・・
それでももしかしたら彼らのようなものの考え方に少しでも近づけるんじゃないか?なんて思ったのがきっかけです。
そこから色々調べていくうちに、ちゃんとやれば仕事になるかも!と思って本格的に勉強を始めた次第です。
勉強履歴
これまでの勉強したことをざっくりあげさせていただきます。
- C言語
- HTML
- CSS
- Bootstrap
- JavaScript
どれも入門レベルですが、HTML、CSS、Bootstrapらへんは今も結構出てくるのでそんなに忘れてはいないと思います。
まとめ
まずは年内に一つアプリを作ってみることを今年の目標に、そしてブログ継続することを永遠の目標に掲げて頑張ってまいります!
エディタ再起動したらいきなりlocalhostに接続できなくなったお話。
これまで普通にrails s
でlocalhostが使えてたんですけど、昨日一度エディタを閉じたらいきなり接続できなくなりました。
原因
多分以前Rails5にアップグレードしてデフォルトのサーバがpumaに変わったせいだと思います。 とりあえずRailsの勉強進めたかったので、今回はこれ以上詳しくは調べていませんが、いずれちゃんと理解できるようになろうと思います。
対処
$ rails s
で起動していたサーバーを、
$ rails s -b 0.0.0.0
で起動するようにしました。
こちらを参考にさせていただきました。
Rails 5.0 beta-2 で Puma のコンフィグを適用させたい - happy lie, happy life
Tutorial9.2 remember userを消し忘れてハマったお話。
Tutorialも9章の終わりまで来ました。 最後にチェックボックスを作ってログインを保持するかどうかの切り替え機能をつけるのですが、そこで凡ミスしてハマったお話です。
概要
- チェックをつけずにブラウザを閉じてもログインが保持されている。
- チェックの有無にかかわらず、
remember_digest
が生成されている。
原因
早い話が、create
の中のremember user
を消し忘れたのと、きちんとブラウザが閉じられていなかったのが原因でした。
チェックボックスをつける前の項で、ユーザーがログインしたことを記憶するためにcreate
の中にremember user
(ヘルパー)を書いてあったのですが、チェックボックスを実装するために書き換えたコードでは削除されています。
当たり前ですが、これがあると問答無用で記憶されてしまいますので・・・
def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) remember user # <=これ redirect_to user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end
デバッグ情報見て問答無用でremember_digestが生成されていたので、絶対このせいだよな・・・とここで気づきました。 チュートリアルの文章中にはあえて削除するようには書かれていませんが、最終的なコードを見るとちゃんと消されてます。
で試しにコメントアウトしたところ、無事ちゃんと機能したようです。 しかしここでまたどうしようもない凡ミスが・・・
ブラウザがきちんと閉じられていなかったので何度消してもログイン状態が保たれてしまっていたのですね。 ×だけでなくきちんと「終了」をしましょう。って、そんな人いないか・・・
こんな感じで、2日も無駄にしましたとさ。めでたしめでたし。