カテゴリー: BackEnd

半年ぶりにRails Tutorialをやったメモ

はじめに

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バージョンをインストールする

# Homebrewをアップデート
brew update

# ruby-buildをアップデート
brew upgrade ruby-build

# インストール可能なrubyのバージョンを確認
rbenv install --list

# Rubyの指定したバージョンをインストール
rbenv install 2.4.0

# 現在rbenvに登録されているRubyのバージョンを確認
rbenv versions

今回のプロジェクト内で2.4.0を使用したいので、まずはプロジェクトを作成します。
そしてプロジェクト内でrbenvの指定をします。

rbenv local 2.4.0

# そのプロジェクト内のバージョンを確認
rbenv version

ちなみに、globalを使用するとデフォルトのバージョンを変更できます。

rbenv global 2.4.0

Guardを起動するとエラーになる

序盤でGuardによって監視しています。
ただ、以下のようなエラーが出た場合、Rubyを入れなおすことが一般的なようです。

Sorry, you can't use Pry without Readline or a compatible library.
Possible solutions:
 * Rebuild Ruby with Readline support using `--with-readline`
 * Use the rb-readline gem, which is a pure-Ruby port of Readline
 * Use the pry-coolline gem, a pure-ruby alternative to Readline

ただ、再度ビルドせずに済む方法はないかと探していたところ(面倒だとは言ってない)、
下記のIssueに記載がありました。
https://github.com/pry/pry/issues/1579

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しました。

$ ps ax | grep spring
17256 ?? Ss 0:05.10 spring app | sample_app | started 17 mins ago | test mode 
17257 ?? Ss 0:04.83 spring app | sample_app | started 17 mins ago | development mode 
14327 s000 S 0:00.71 spring server | sample_app | started 11 hours ago 
19581 s000 R+ 0:00.01 grep spring

$ kill -9 17256

Springとは

アプリケーションプリローダーのことであり、Rails4.1から導入されたそうです。
railsコマンドが実行される際に、Springサーバーが起動し、2回目以降のライブラリのロード時間を短縮してくれます。
`rails console`は初回起動に時間がかかっても、2回目以降は素早くたちあがると思います。

ちなみにRails Tutorialではdev環境で使用しています。

group :development do
  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`が立ち上がりませんでした。

Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

3000番ポートが使用されているようなので、lsofで確認します。
こちらのブログ様が、用途ごとにまとめられており分かりやすかったです。
lsof:オープンしているファイルを調べる

$ lsof -i:3000
COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby    10476 user   34u  IPv4 0xcb2946624bb2b959      0t0  TCP *:hbci (LISTEN)
ruby    13241 user   34u  IPv4 0xcb2946624bb2b959      0t0  TCP *:hbci (LISTEN)

$ kill -9 10476

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の方で判断して変えてくれるのですね。

class Micropost < ApplicationRecord

default_scope -> { order(created_at: :desc) }

end
>> Micropost.first
  Micropost Load (6.4ms)  SELECT  "microposts".* FROM "microposts" ORDER BY "microposts"."created_at" DESC LIMIT ?  [["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
  Micropost Load (0.7ms)  SELECT  "microposts".* FROM "microposts" ORDER BY "microposts"."created_at" ASC LIMIT ?  [["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アプリ内のファイルを確認することができます。

$ heroku run bash

さいごに

忘れていたこと、そもそも分かった気になっていたこともあり、2回目とはいえ勉強になることが多いです。
やはりRails Tutorialは良い教材であることを再認識しました。

ログイン認証、および最終章あたりは理解が不十分な気がしているので、また時間を置いて実践したいと思います。

naoki85

シェア
執筆者:
naoki85
タグ: Rails

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

3週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前