SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Downloaden Sie, um offline zu lesen
Crafting Rails4
Application
Chapter 3. Retrieving View Templates from Custom Stores
この章でなにするのか
• テンプレート管理システムを開発していきながらActionView::Render
の理解を深める。
• templateの保存先をfilesystemからdatabaseに切り替え、template
のCRUDを実装する
• resolverの実装

railsでも実装されているresolverを実装することでtemplateがどの
ように解析されているのかを理解する。
• CmsControllerの開発

applicationControllerの継承した上で汎用的なtemplateを返す
Controllerを開発する。
3.1 Revisiting the
Rendering Stack
• まずは埋め込まれたrubyコードを実行可能にする。
• Rails controllerとviewで共有される
lookup_contextにはtemplateを見つけるのに必要
な情報が含まれている。
• railsではデフォルトでview_pathを提供している。

例: app/controllers/users#indexならば

app/views/index.html.erbなど
• イメージだとこれ
以前実装した
MailForm::Notifier
• view_pathを追加することで

default views_pathからtemplateを探索

=> lib/viewsを探索する。この順番でtemplate
を探す
• テンプレート管理システムを作るので
The Resolver API
• templateを返すメソッドfind_all()

cacheになければ、ブロックが返されるキャッ
シュメカニズム
ActionView::Resolver
• テンプレートを取り出すために
SqlTemplate::Resolverを作る
• イメージに加えるとこんな感じ
SqlTemplateTest
自作SqlTemplate::Resolver
• find_all()はActionViewを返す。
• virtual_pathにテンプレートのpathを指定
• sourceはdatabaseに保存しているテンプレートボ
ディ
• テンプレートにはidを付与(ymlにidタグを追加)
• i18n.t( message )ではなく、users.index.message
sql_template.yml
• ymlをdatabaseとして活用している。
• idを付与
• UserのCRUDの追加
• /usersではlayoutのtemplate参照先がfile systemで

bodyがdatabaseから参照される
Userが参照するtemplateを
fixtureに移動する。
• cacheは初期化の際に作成され、インスタンス変数
@cached
• Rails.application.config.cache_classes = trueの
ときにresolverはテンプレートを保存
• キャッシュのクリアはclear_cache()
• templateのvalues, cache, prefix, name,localeで貯
蔵する。
productionにおけるtemplate
検索の速度
find_all()の引数によるcache
例
• 3つともに振る舞いは期待通りだけど、パフォー
マンスに違いがでる。
irbで軽くHashの操作
• undef_method :hashによりhashに保存するこ
とができない。
hashの操作イメージ
Hashの実験1
• hash[:a] = 1

=> 1
• :a.hash

=> 1112200030795538893
• hash[:b] = 2

=> 2
• :b.hash

=> 2185038335961141261
• :a.eql?(:a)

=> true # valueが返される
• :a.eql?(:b)

=> false # hash[:a]のvalueは返されない。

=> このままeql?を繰り返して見つからなければnil
Hashの実験2
• hash = {} # Hash.newと同様
• object = Obejct.new

=> #<Object:0x007fb015155b90>
• hash[object] = 1
• hash[object]

=> 1
• def object.hash; 123; end
• hash[object]

=> nil
• hash

=> {#<Object:0x007fb015155b90> => 1}
!
Hash
• rubyでは、Object#hash()をキーとして蓄え
る。この整数値を利用して比較する。
3つのHashのパフォーマンス
テスト
ActionViewのcached()
• パフォーマンステストの結果によりHashの入れ
子がもっとも早いことがわかる。
• @cached[key][prefix][name][partial][locals]

=> 20倍の早さの差がでている。
cacheの破棄
• データが作成・更新されるときにclear_cache()
を呼び出す。
clear_cache()の実装
clear_cache()の実装2
• 保存した際に、instance.claer_cacheを実行す
る。
cacheの注意点
• resolver instanceがcacheをstoreしているの
で、databaseのtemplateを追加したり更新する
たびに全てのSqlTemplate::Resovler instance
とclear_cache()の実行を監視する必要がある。
• 対策
• redis, memcachedなどのKVSを利用する。
• キャッシュを破棄したい際にinstanceに通知を
出す。
• config.action_view.cache_template_loading
= falseにする
• config.action_view.cache_template_loading
= falseにする
• * テンプレートキャッシュが使用不可になる
が,templateのupdated_atとresolverがもつ日
時と比較して、resolverより新しければテンプ
レートを変換するようにしています。
ありがとうございまし
た。

Weitere ähnliche Inhalte

Ähnlich wie 発表資料20140318

Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズSORACOM, INC
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionGoh Matsumoto
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼうyouku
 
130329 04
130329 04130329 04
130329 04openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4openrtm
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRshinnosuke kugimiya
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門Yuto Takei
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5Tomo Mizoe
 
KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷KLab Inc. / Tech
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】Tomoharu ASAMI
 
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装Heliumエンジンの設計と実装
Heliumエンジンの設計と実装DADA246
 
Cloud Formation Best Practice
Cloud Formation Best PracticeCloud Formation Best Practice
Cloud Formation Best Practiceyutamuramot
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaInsight Technology, Inc.
 
Awsのインフラをデザインパターン駆使して設計構築
Awsのインフラをデザインパターン駆使して設計構築Awsのインフラをデザインパターン駆使して設計構築
Awsのインフラをデザインパターン駆使して設計構築Monstar Lab Inc.
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAmazon Web Services Japan
 
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoya
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoyaオープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoya
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 NagoyaSatoshi Shimazaki
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますfukuoka.ex
 

Ähnlich wie 発表資料20140318 (20)

Amazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズAmazon ElastiCache - AWSマイスターシリーズ
Amazon ElastiCache - AWSマイスターシリーズ
 
20170413 aws–windows users meetup
20170413 aws–windows users meetup20170413 aws–windows users meetup
20170413 aws–windows users meetup
 
Rails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd editionRails初心者レッスン lesson1 3rd edition
Rails初心者レッスン lesson1 3rd edition
 
scala+liftで遊ぼう
scala+liftで遊ぼうscala+liftで遊ぼう
scala+liftで遊ぼう
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
あの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoRあの日見たMVCを僕たちはまだ知らない for RoR
あの日見たMVCを僕たちはまだ知らない for RoR
 
これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門これから始めるAzure Kubernetes Service入門
これから始めるAzure Kubernetes Service入門
 
はじめてのASP.NET MVC5
はじめてのASP.NET MVC5はじめてのASP.NET MVC5
はじめてのASP.NET MVC5
 
KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
 
Cloud Formation Best Practice
Cloud Formation Best PracticeCloud Formation Best Practice
Cloud Formation Best Practice
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
 
Awsのインフラをデザインパターン駆使して設計構築
Awsのインフラをデザインパターン駆使して設計構築Awsのインフラをデザインパターン駆使して設計構築
Awsのインフラをデザインパターン駆使して設計構築
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormationAWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
AWS Black Belt Tech シリーズ 2015 - AWS CloudFormation
 
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoya
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoyaオープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoya
オープンソースのクラウド基盤 CloudStackによるIaaS構築入門 @OSC 2013 Nagoya
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
 

発表資料20140318