7
7

More than 5 years have passed since last update.

Middlemanでbuild時にassets類をCDNへのパスにしよう

Last updated at Posted at 2013-12-07

アドベントカレンダー2013 3日目の記事です。
Middleman Advent Calendar 2013 - Adventar


画像やcssだけcdnにします、というのはよくある話。それに対応しましょう。

いきなりまとめ

  • build時に、set :css_dirなどでCDNへ書き換え
  • リラティブプロトコルじゃないとうまくいかない

ググると答えがある

ruby - middleman - asset path for CDN at build time - Stack Overflow

config.rb
configure :build do
  set :css_dir, '//cdn.domain.com/assets'
end 

これでbuild時のみパスを変更できる。

ディレクトリを動的に設定したい。例えば日付ディレクトリ。

CDNへのデプロイは、

  • キャッシュが効き過ぎる
  • なんかあったら、戻りにくい

というのがあって、だいたい日付のディレクトリを作ってそこにassetsをほりこむようにしている。

http://hoge.com/assets/2013-12-07_12-34-56/

↑ こういうディレクトリを作ってそこに画像やcssなどを入れている。最終的にはhoge.com/index.htmlを差し替えるだけですむようにしている。

これをMiddlemanでやってみよう。

config.rb
configure :build do
  releaseTime = Time.now().strftime("%Y-%m-%d_%H-%M-%S")
  set :css_dir, "//hoge.com/assets/#{releaseTime}"
end
layout.slim
== stylesheet_link_tag "all"
index.html
<link href="//hoge.com/assets/2013-12-07_15-08-52/all.css" media="screen" rel="stylesheet" type="text/css" />

注意: Relative Protocol (src="//hoge.com/"みたいな書き方)にしないとうまくいかない

set :css_dir, "http//hoge.com/assets/#{releaseTime}"みたいにhttpから始めると、

<link href="/http://hoge.com/assets/2013-12-07_15-08-52/all.css" media="screen" rel="stylesheet" type="text/css" />

↑こんな感じで/httpというおかしなことになります。なんとかする方法は知らないので教えてください!

7
7
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
7
7