Slide 1

Slide 1 text

RailsͷΤϥʔϖʔδӡ༻ʹ
 ͍ͭͯຊؾग़ͯ͠ߟ͑ͯΈͨ TokyuRubyKaigiɹ2015/08/29 @yasaichi

Slide 2

Slide 2 text

About me [1] pry(main)> me => { twitter:'@_yasaichi', github: 'yasaichi', splatoon: nil, blog: 'http://web-salad.hateblo.jp' }

Slide 3

Slide 3 text

Outline 1. എܠ 2. ຊؾग़ͯ͠ߟ͑ͯΈͨ݁Ռ 3. ޙ೔ஊ 4. ·ͱΊ

Slide 4

Slide 4 text

Background

Slide 5

Slide 5 text

Motivation • ٱʑʹΤϥʔϖʔδΛ͍ͬͨ͡ΒͭΒ͔ͬͨ • ςϯϓϨʔτΤϯδϯ͕࢖͑ͳ͍ • public/assetsҎԼΛࢀরͰ͖ͳ͍ • ෦෼ςϯϓϨʔτ͕ར༻Ͱ͖ͳ͍

Slide 6

Slide 6 text

Previous works • Rails.application.config.exceptions_appΛ
 ࢖ͬͯಈతʹΤϥʔϖʔδΛੜ੒͢Δ • RailsͰΤϥʔϖʔδΛಈతʹ
 http://qiita.com/r7kamura/items/1435823b1703df0402ee • yuki24/rambulance (Gem)
 https://github.com/yuki24/rambulance

Slide 7

Slide 7 text

Limitations Railsͱؔ܎ͳ͍੩త ϖʔδ͸Ͳ͏͢Δͷʁ

Slide 8

Slide 8 text

੩తϑΝΠϧ͕ඞཁʁ
 assetͷϦϯΫ੾Ε໰୊ʁ

Slide 9

Slide 9 text

ɾɾɾ

Slide 10

Slide 10 text

(ƅшƅ)Űŕ!

Slide 11

Slide 11 text

Τϥʔϖʔδ΋Asset PipelineͰ؅ཧ͢Ε͹
 ͍͍ͷͰ͸ʁ

Slide 12

Slide 12 text

Proposed method

Slide 13

Slide 13 text

Summary 1. ࢖༻͍ͨ͠ςϯϓϨʔτΤϯδϯΛొ࿥ 2. app/assets/templatesʹΤϥʔϖʔδΛॻ͖ɺ
 Asset Pipelineͷ؅ཧର৅ͱ͢Δ 3. assets:precompileΛhookͯ͠ΤϥʔϖʔδΛ
 publicҎԼʹҠ͢ॲཧΛॻ͘ 4. σϓϩΠ࣌ʹrake assets:precompileΛ࣮ߦ͢Δ

Slide 14

Slide 14 text

1. Register template engine # config/initializers/assets.rb # Use Haml Rails.application.assets.register_engine('.haml', Tilt::HamlTemplate) # Use Slim # slim-rails 3.0.1 Ҏ߱Ͱ͸ෆཁ Rails.application.assets.register_engine('.slim', Slim::Template)

Slide 15

Slide 15 text

2. Write error pages / app/assets/templates/404.html.slim doctype html html head title TestApp = stylesheet_link_tag 'error', media: 'all' body p 404.html # config/initializers/assets.rb Rails.application.config.assets.precompile << 'error.css'

Slide 16

Slide 16 text

3. After hook for precompile # lib/tasks/after_precompile.rb Rake::Task['assets:precompile'].enhance do logger = Logger.new(STDOUT) %w(404 422 500 503).each do |status_code| pattern = Rails.public_path.join("assets/#{status_code}-*.html") src = Pathname.glob(pattern).sort_by { |path| path.mtime }.last next if src.nil? dest = Rails.public_path.join("#{status_code}.html") logger.info("mv #{src} to #{dest}") FileUtils.mv(src, dest) end end digestΛऔΓআ͍ͯ
 public/ҎԼʹҠ͢

Slide 17

Slide 17 text

4. Precompile on deploy % RAILS_ENV=production rake assets:precompile I, [2015-08-28T01:07:37.256609 #39050] INFO -- : mv /path/to/public /assets/404-f26c195d5a2d8b404e020dc08dcfc5856940832aff1906b2eadc584a cbbc8735.html to /path/to/public/404.html

Slide 18

Slide 18 text

Strong points • ςϯϓϨʔτΤϯδϯ͕࢖͑Δ • Sprockets::Rails::HelperͰ࣮૷͞Ε͍ͯΔ
 assetؔ࿈ͷhelper͕࢖͑ΔʢҎԼൈਮʣ asset_path, asset_url, audio_path, audio_tag, audio_url, content_tag, favicon_link_tag, font_path, font_url, image_path, image_tag, image_url, javascript_include_tag, javascript_path, javascript_url, path_to_asset, stylesheet_link_tag, stylesheet_path, stylesheet_url, tag, video_path, video_tag, video_url

Slide 19

Slide 19 text

Weak points • renderϝιου͕࢖͑ͳ͍ͷͰɺϔομʔ
 ͳͲڞ௨ͷςϯϓϨʔτΛಡΈࠐΊͳ͍ • मਖ਼࣌ʹදࣔΛ֬ೝ͢Δͷ͕΍΍໘౗ʢ˞ʣ 
 ※ railsΛ։ൃ؀ڥͰ্ཱͪ͛ͯ/assetsҎԼʹΞΫηε͢Δ͚ͩ
 ɹ͕ͩɺͦΕΛσβΠφʔ͞Μʹ΍ͬͯ΋Β͏৔߹Λߟ͑Δͱ…

Slide 20

Slide 20 text

After a few days …

Slide 21

Slide 21 text

͜Ε͸͍͍ઢ͍ͬͯΔͷͰ͸ʁ ͱࢥͬͯϒϩάΛॻ͍ͨ http://web-salad.hateblo.jp/entry/2015/07/11/130500

Slide 22

Slide 22 text

ݫ͍͠ݱ࣮ Effective RubyΛಡΜͩͷͰײ૝Λॻ͍ͯ͘ɺͱ͔ͷํ͕΢έ͕ྑ͍ ձࣾͷઌഐ͕ελʔΛ ͚ͭͯ͘Εͨʢ਎಺ײʣ

Slide 23

Slide 23 text

ԶͷΤϯτϦ͕͜Μͳʹ
 όζΒͳ͍Θ͚͕ͳ͍ʂ

Slide 24

Slide 24 text

ΧοͱͳͬͯgemΛ࡞ͬͨ

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

gakubuchi • https://github.com/yasaichi/gakubuchi • جຊతͳ࢓૊Έ͸ࠓ·Ͱઆ໌ͨ͠௨Γ • ੩తϖʔδશൠʹద༻Ͱ͖ΔΑ͏ʹͨ͠ • Τϯδϯ΍ϑοΫ͸ࣗಈͰઃఆ͞ΕΔͷͰ ੩తϖʔδͷ࣮૷ʹूதͰ͖Δ

Slide 27

Slide 27 text

Overview gem 'gakubuchi' gem 'haml-rails' % rails generate gakubuchi:install create config/initializers/gakubuchi.rb create app/assets/templates % touch app/assets/templates/foo.html.haml % rake assets:precompile % cd public && ls *.html 404.html 422.html 500.html foo.html Կ΋ઃఆͯ͠ͳ͍ ͷʹͰ͖ͨʂ

Slide 28

Slide 28 text

ৄ͘͠͸ҎԼͷΤϯτϦͰ http://web-salad.hateblo.jp/entry/2015/08/17/090000

Slide 29

Slide 29 text

Conclusion

Slide 30

Slide 30 text

Conclusion 1. RailsͰΤϥʔϖʔδΛॻ͘ͷ͕ͭΒ͔ͬͨ 2. ΤϥʔϖʔδΛAsset PipelineͰ؅ཧͯ͠
 ָΛ͢Δख๏ΛఏҊͨ͠ 3. ఏҊख๏ΛΑΓҰൠతͳέʔεʹద༻Ͱ͖Δ
 gakubuchiͱ͍͏gemΛ࡞ͬͨ

Slide 31

Slide 31 text

Happy coding on Rails!