Help us understand the problem. What is going on with this article?

Railsのデバッグ環境等を整備する

More than 5 years have passed since last update.

デバッグまわりのgemを整理してみました

エラー画面を見やすくする「better_errors」

無機質なRailsの標準のエラー画面が以下のように見やすくなります。

group :development, :staging do
  gem 'better_errors'       #追加
end

標準のエラー画面

スクリーンショット 2014-02-27 9.22.50.png

better_errorsを導入した場合のエラー画面

スクリーンショット 2014-02-27 9.27.15.png

エラー画面上でREPLが使えるようになる「binding_of_caller」

rails cで出来るような対話的な実行がエラー画面上から行えるようになります

group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'       #追加
end
  • 画面上で対話的にコードを実行できる スクリーンショット 2014-02-27 9.39.34.png

railsのコンソールを便利にする「pry-rails」

pry-railsを導入するとrailsのコンソール起動時にpryが起動するようになり、pryやpry-railsの便利な機能が使えます
pry-railsはpryに依存しているので下記のようにするとpryも同時にインストールされます

group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'           #追加
end

ブレークポイントをいれる

プログラム中に以下の記述をすると、ブレークポイントをいれてプログラムを止めることができます

   # GET /boards
   # GET /boards.json
   def index
     @boards = Board.all
pry.binding
   end

このように「pry.binding」と記述することでその位置でプログラムを止めてコンソールを使うことができます

Started GET "/boards" for 127.0.0.1 at 2014-03-04 09:28:21 +0900
Processing by BoardsController#index as HTML
[1] pry(#<BoardsController>)> p @boards
  Board Load (0.3ms)  SELECT "boards".* FROM "boards"
#<ActiveRecord::Relation [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]>
=> [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]
[2] pry(#<BoardsController>)> Board.all
  CACHE (0.0ms)  SELECT "boards".* FROM "boards"
=> [#<Board id: 1, name: "board1", created_at: "2014-02-27 00:19:18", updated_at: "2014-02-27 00:19:18">]

ルーティングを表示

show-routesでルーティングを表示できます

pry(main)> show-routes
       Prefix Verb   URI Pattern                   Controller#Action
    positions GET    /positions(.:format)          positions#index
              POST   /positions(.:format)          positions#create
 new_position GET    /positions/new(.:format)      positions#new
edit_position GET    /positions/:id/edit(.:format) positions#edit
     position GET    /positions/:id(.:format)      positions#show
              PATCH  /positions/:id(.:format)      positions#update
              PUT    /positions/:id(.:format)      positions#update
              DELETE /positions/:id(.:format)      positions#destroy
     stickies GET    /stickies(.:format)           stickies#index
              POST   /stickies(.:format)           stickies#create
   new_sticky GET    /stickies/new(.:format)       stickies#new
  edit_sticky GET    /stickies/:id/edit(.:format)  stickies#edit
       sticky GET    /stickies/:id(.:format)       stickies#show_______

モデルを表示

show-modelsでモデルを表示できます

pry(main)> show-models
Board
  id: integer
  name: string
  created_at: datetime
  updated_at: datetime
Position
  id: integer
  board_id: integer
  sticy_id: integer
  kpt_type: integer
  sequence: integer
  created_at: datetime
  updated_at: datetime
Sticky
  id: integer
  memo: string
  deleted: boolean
  created_at: datetime
  updated_at: datetime

pryのデバッグでステップ実行などを行なえる「pry-debugger」

ステップ実行などが出来るようになります

group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'
  gem 'pry-debugger'    #追加
end

以下のように定義するとショートカットを使えます

~/.pryrc
if defined?(PryDebugger)
  Pry.commands.alias_command 'c', 'continue'
  Pry.commands.alias_command 's', 'step'
  Pry.commands.alias_command 'n', 'next'
  Pry.commands.alias_command 'f', 'finish'
end

ルーティングをブラウザで表示できる「sextant」

sextantを導入すると、ルーティングをブラウザ上で確認できます。

group :development, :staging do
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'pry-rails'
  gem 'sextant'         #追加
end

http://localhost:3000/rails/routesにアクセスしてルーティングを確認できます。

スクリーンショット 2014-03-06 9.34.25.png

http://qiita.com/kanekomasanori@github/items/e705d6b9fbfd6de6c63f

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away