3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails6 のちょい足しな新機能を試す89(Event object編)

Last updated at Posted at 2019-10-04

はじめに

Rails 6 に追加された新機能を試す第89段。 今回は、 Event object 編です。
Rails 6 では、ActiveSupport::Notifications.subscribe で、ブロックパラメータを1つにすると、そのブロックパラメータに ActiveSupport::Notifications::Event オブジェクトが設定されるようになりました。
これで、ブロックの中で ActiveSupport::Notifications::Event.new を使う必要がなくなりました。

Ruby 2.6.4, Rails 6.0.0 で確認しました。

$ rails --version
Rails 6.0.0

今回は、User の CRUD を作り、各コントローラのアクションを実行したときの情報を取得してログに出力してみます。

プロジェクトを作る

rails new rails_sandbox
cd rails_sandbox

User の CRUD を作る

name をもつ User の CRUD を作ります

bin/rails g scaffold User name

Subscribe する

config/initializers/notification_subscriber.rb を作成します。
ActiveSupport::Notifications.subscribe を呼び出すときに、ブロックパラメータを event 1つだけにします。

config/initializers/notification_subscriber.rb
ActiveSupport::Notifications.subscribe 'process_action.action_controller' do |event|
  action = "#{event.payload[:controller]}##{event.payload[:action]}"
  Rails.logger.info("#{action} cpu_time=#{event.cpu_time} duration=#{event.duration} allocations=#{event.allocations}")
end

User の登録などをしてログを確認する

実際に rails server を実行してブラウザから http://localhost:3000/users にアクセスします。

以下のようにコンソールに出力されているはずです。

...
UsersController#index cpu_time=833.013591 duration=840.9244199865498 allocations=1237733

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails_sandbox/tree/try089_subscriber_event

参考情報

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?