はじめに
Railsを触り始めて半年ほどたちました、tonnyです。
復習もかねてRails Tutorialを実施したので、そのメモを残します。
やはり2回目でも気づくことは多いので、非常に勉強になりました。
環境について
- Mac OS X Yosemite 10.10.5
- Ruby 2.4.0
- Rails 5.0.1
Railsは先日バージョン5.0.2がリリースされたそうですね。
http://weblog.rubyonrails.org/2017/3/1/Rails-5-0-2-has-been-released/
備忘録
Rubyのアップデート
Rubyのバージョンはrbenvで管理しています。
そのため、まずはrbenvのRubyに2.4.0を追加します。
下記のサイト様を参考にさせていただきました。
rbenvをupdateして最新のRubyバージョンをインストールする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | # Homebrewをアップデート brew update # ruby-buildをアップデート brew upgrade ruby-build # インストール可能なrubyのバージョンを確認 rbenv install--list # Rubyの指定したバージョンをインストール rbenv install2.4.0 # 現在rbenvに登録されているRubyのバージョンを確認 rbenv versions |
今回のプロジェクト内で2.4.0を使用したいので、まずはプロジェクトを作成します。
そしてプロジェクト内でrbenvの指定をします。
1 2 3 4 | rbenv local2.4.0 # そのプロジェクト内のバージョンを確認 rbenv version |
ちなみに、globalを使用するとデフォルトのバージョンを変更できます。
1 | rbenv global2.4.0 |
Guardを起動するとエラーになる
序盤でGuardによって監視しています。
ただ、以下のようなエラーが出た場合、Rubyを入れなおすことが一般的なようです。
1 2 3 4 5 | Sorry,youcan'tusePrywithoutReadlineoracompatiblelibrary. Possiblesolutions: *RebuildRubywithReadlinesupportusing`--with-readline` *Usetherb-readlinegem,whichisapure-RubyportofReadline *Usethepry-coollinegem,apure-rubyalternativetoReadline |
ただ、再度ビルドせずに済む方法はないかと探していたところ(面倒だとは言ってない)、
下記のIssueに記載がありました。
https://github.com/pry/pry/issues/1579
1 2 3 4 | group:development,:test do gem'pry' gem'rb-readline' end |
ちなみに
Pryは対話的にRubyを実行できるツールのことです。
Rubyに標準で搭載されているirbの代替です。
https://github.com/pry/pry
readlineはコンソールなどで入力するコマンドを読み取るgemのようです。
https://github.com/ConnorAtherton/rb-readline
minitestが、個別でやると成功するのに、まとめて実行すると失敗する
どうやらSpringが悪さをしているようなので、全部killしました。
1 2 3 4 5 6 7 | $psax|grepspring 17256??Ss0:05.10springapp|sample_app|started17minsago|testmode 17257??Ss0:04.83springapp|sample_app|started17minsago|developmentmode 14327s000S0:00.71springserver|sample_app|started11hoursago 19581s000R+0:00.01grepspring $kill-917256 |
Springとは
アプリケーションプリローダーのことであり、Rails4.1から導入されたそうです。
railsコマンドが実行される際に、Springサーバーが起動し、2回目以降のライブラリのロード時間を短縮してくれます。rails console
は初回起動に時間がかかっても、2回目以降は素早くたちあがると思います。
ちなみにRails Tutorialではdev環境で使用しています。
1 2 3 4 5 6 | group:developmentdo gem'web-console','>= 3.3.0' gem'listen','~> 3.0.5' gem'spring' gem'spring-watcher-listen','~> 2.0.0' end |
rails serverでポートが使用されていて失敗する
下記のようなエラーがでて、rails server
が立ち上がりませんでした。
1 | Address already inuse-bind(2)for"0.0.0.0"port3000(Errno::EADDRINUSE) |
3000番ポートが使用されているようなので、lsof
で確認します。
こちらのブログ様が、用途ごとにまとめられており分かりやすかったです。
lsof:オープンしているファイルを調べる
1 2 3 4 5 6 | $lsof-i:3000 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 10476user 34u IPv40xcb2946624bb2b959 0t0 TCP*:hbci(LISTEN) ruby 13241user 34u IPv40xcb2946624bb2b959 0t0 TCP*:hbci(LISTEN) $kill-910476 |
aタグをtarget=”_blank”にするときはrel=”noopener”をつける
これはまだよく分かっておりませんが、備忘録としてQiitaの記事を載せておきます。
http://qiita.com/memolog/items/9913b0067e4e6883ed17
開いた記事から画面操作ができてしまうことが問題のようです。
default_scopeで”order by id desc”
default_scopeは使ったことはないものの、事前知識はありました。
デフォルトの条件を指定するので、order by id desc
と指定しておけばidの降順がデフォルトになります。
Micropostモデルにdefault_scopeで指定すると、Micropost.firstが降順で最初の1件を取得することは理解していました。
ただ、Micropost.lastがorder by id asc
になることは驚きました。
Railsの方で判断して変えてくれるのですね。
1 2 3 4 5 | classMicropost<ApplicationRecord default_scope->{order(created_at::desc)} end |
1 2 3 4 5 6 | >>Micropost.first MicropostLoad(6.4ms) SELECT "microposts".*FROM"microposts"ORDERBY"microposts"."created_at"DESCLIMIT? [["LIMIT",1]] =>#<Micropost id: 301, content: "ああああ", user_id: 1, created_at: "2017-03-06 03:17:57", updated_at: "2017-03-06 03:17:57", picture: nil> >>Micropost.last MicropostLoad(0.7ms) SELECT "microposts".*FROM"microposts"ORDERBY"microposts"."created_at"ASCLIMIT? [["LIMIT",1]] =>#<Micropost id: 1, content: "Quibusdam ut iusto neque ea quia.", user_id: 1, created_at: "2017-03-05 15:40:37", updated_at: "2017-03-05 15:40:37", picture: nil> |
herokuのファイルを確認する
heroku run bash
でUNIXコマンドを使用してherokuアプリ内のファイルを確認することができます。
1 | $heroku run bash |
さいごに
忘れていたこと、そもそも分かった気になっていたこともあり、2回目とはいえ勉強になることが多いです。
やはりRails Tutorialは良い教材であることを再認識しました。
ログイン認証、および最終章あたりは理解が不十分な気がしているので、また時間を置いて実践したいと思います。