Download - statische sites met nanoc
statische sitesmet nanocDenis Defreyne @ Fronteers, 19 juli 2012
twitter.com/ddfreynegithub.com/ddfreyne
Oorsprong
A long time agoin a galaxy far away… :(
A long time agoin a galaxy far away… :)
Dit is een paragraaf. Eentje met twee zinnen zelfs!
1. Een kleine lijst2. met twee elementen
Sectie Twee-----------
Nog een kleine paragraaf.
<p>Dit is een paragraaf. Eentje met twee zinnen zelfs!</p>
<ol><li>Een kleine lijst</li><li>met twee elementen</li></ol>
<h2>Sectie Twee</h2>
<p>Nog een kleine paragraaf.</p>
Markdown HTML
Markdown HTMLERB
<html> <head> <title>Pagina X</title> </head> <body> <h1>Titel Hoort Hier</h1> <%= yield %> </body></html>
<html> <head> <title>Pagina X</title> </head> <body> <h1>Titel Hoort Hier</h1> <p>Dit is een paragraaf. Eentje met twee zinnen zelfs!</p> <ol> <li>Een kleine lijst</li> <li>met twee elementen</li> </ol> <h2>Sectie Twee</h2> <p>Nog een kleine paragraaf.</p> </body></html>
about/index.html →http://example.com/about/
about/index.html →http://example.com/about/
about.html →http://example.com/about.html
1. Markdown is eenvoudigerom te schrijven dan HTML.
2. ERB zorgt voor eenconsistente layout.
nanoc luvz <3
Soon!
“really digging nanoc for generating static sites”
Rick Olson (GitHub)
“I’m singing the praises of nanoc to everyone I come across”
Wayne E. Seguin (RVM)
Het Universum
Ace, Bonsai, Blacksmith, Blogofile, Chisel, Deplot, Frank, Graze, Hakyll,
Hobix, Hyde, Jekyll, Korma, Machined, Markdoc, Middleman, nanoc, Pagegen, Pelican, Phrozn, PieCrust, Pilcrow, Pith,
Punch, Quill, RakeWeb, Rassmalog, Rizzo, Rog, Rote, RubyFrontier, Ruroh,
Second Crack, Speechhub, Stasis, StaticMatic, StaticWeb, Tahchee,Ultra simple Site Maker, Webby,
Website Meta Language, Wintersmith,Yurt CMS, ZenWeb, cyrax, mynt, poole,
webgen, yst
Ace, Bonsai, Blacksmith, Blogofile, Chisel, Deplot, Frank, Graze, Hakyll,
Hobix, Hyde, Jekyll, Korma, Machined, Markdoc, Middleman, nanoc, Pagegen, Pelican, Phrozn, PieCrust, Pilcrow, Pith,
Punch, Quill, RakeWeb, Rassmalog, Rizzo, Rog, Rote, RubyFrontier, Ruroh,
Second Crack, Speechhub, Stasis, StaticMatic, StaticWeb, Tahchee,Ultra simple Site Maker, Webby,
Website Meta Language, Wintersmith,Yurt CMS, ZenWeb, cyrax, mynt, poole,
webgen, yst
Getting Started
% gem install nanoc
% gem install nanoc% nanoc create-site fronteers
% gem install nanoc% nanoc create-site fronteers% cd fronteers
% gem install nanoc% nanoc create-site fronteers% cd fronteers% echo "Helleuw!" > content/hoi.txt
% gem install nanoc% nanoc create-site fronteers% cd fronteers% echo "Helleuw!" > content/hoi.txt% nanoc
% gem install nanoc% nanoc create-site fronteers% cd fronteers% echo "Helleuw!" > content/hoi.txt% nanoc% nanoc view
% gem install nanoc% nanoc create-site fronteers% cd fronteers% echo "Helleuw!" > content/hoi.txt% nanoc% nanoc view% open http://localhost:3000/hoi
Metadata
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
title: "Documentation"markdown: basicis_dynamic: true
<html> <head> <title>Pagina X</title> </head> <body> <h1>Den Titel</h1> <p>Written by Denis</p> <%= yield %> </body></html>
<html> <head> <title><%= item[:title] %></title> </head> <body> <h1><%= item[:title] %></h1> <p>Written by Denis</p> <%= yield %> </body></html>
<html> <head> <title><%= item[:title] %></title> </head> <body> <h1><%= item[:title] %></h1> <p>Written by <%= item[:author] %></p> <%= yield %> </body></html>
Filters, Regels, Oh My!
Filters voor inhoud:Markdown, Textile,RDoc, ASCIIDoc
Markdown filters:BlueCloth, Pandoc, RedCarpet, RDiscount, Kramdown, Maruku
Dynamische filters:ERB, Erubis, Haml,Mustache, Handlebars
Meer filters:Sass & Less!
Nog meer filters:Rubypants & Typogruby!
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
class FronteersFilter < Nanoc::Filter
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
class FronteersFilter < Nanoc::Filter
identifier :fronteers
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
class FronteersFilter < Nanoc::Filter
identifier :fronteers
def run(content, params={})
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
class FronteersFilter < Nanoc::Filter
identifier :fronteers
def run(content, params={}) content.gsub( 'Fronteers', 'FRONTEERS!!!!!!111')
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
class FronteersFilter < Nanoc::Filter
identifier :fronteers
def run(content, params={}) content.gsub( 'Fronteers', 'FRONTEERS!!!!!!111') end
end
Rules
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/stylesheets/*/' do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/stylesheets/*/' do
filter :sass, Compass.sass_engine_options
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/stylesheets/*/' do
filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/stylesheets/*/' do
filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css
filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '*' do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '*' do
filter :erb
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '*' do
filter :erb
filter :kramdown, :auto_ids => false
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '*' do
filter :erb
filter :kramdown, :auto_ids => false
filter :colorize_syntax
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
<pre><code class="language-ruby">class Bob def greet(person) puts "Hi, #{person}!" endend</code></pre>
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
title: "Documentation"markdown: basicis_dynamic: true
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
if item[:is_dynamic]
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
if item[:is_dynamic] filter :erb
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
if item[:is_dynamic] filter :erbend
route '*' do
route '*' do # /about/ # -> /about/index.html
route '*' do # /about/ # -> /about/index.html item.identifier + 'index.html'end
route '*' do # /about/ # -> /about/index.html item.identifier + 'index.html'end
route '*' do
route '*' do # /about/ # -> /about/index.html item.identifier + 'index.html'end
route '*' do # /about/ # -> /about.html
route '*' do # /about/ # -> /about/index.html item.identifier + 'index.html'end
route '*' do # /about/ # -> /about.html item.identifier.chop + '.html'end
route '/style/*/' do
route '/style/*/' do # /style/screen/ # -> /style/screen-v15.css
route '/style/*/' do # /style/screen/ # -> /style/screen-v15.css item.identifier.chop +
route '/style/*/' do # /style/screen/ # -> /style/screen-v15.css item.identifier.chop + "-v#{item[:version]}" +
route '/style/*/' do # /style/screen/ # -> /style/screen-v15.css item.identifier.chop + "-v#{item[:version]}" + '.css'end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/images/*/' doend
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/images/*/' doend
compile '/images/*/', :rep => :thumb do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/images/*/' doend
compile '/images/*/', :rep => :thumb do filter :thumbnail, :size => '100x80'end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
route '/images/*/', :rep => :thumb do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
route '/images/*/', :rep => :thumb do item.identifier.chop + '-thumb' + item[:extension]end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
route '/images/*/', :rep => :thumb do item.identifier.chop + '-thumb' + item[:extension]end
content/images/blah.jpg
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
route '/images/*/', :rep => :thumb do item.identifier.chop + '-thumb' + item[:extension]end
content/images/blah.jpg
output/images/blah.jpg
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
route '/images/*/' do item.identifier.chop + item[:extension]end
route '/images/*/', :rep => :thumb do item.identifier.chop + '-thumb' + item[:extension]end
content/images/blah.jpg
output/images/blah.jpgoutput/images/blah-thumb.jpg
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/blog/*/', :rep => :mp3 do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/blog/*/', :rep => :mp3 do filter :say
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/blog/*/', :rep => :mp3 do filter :say filter :lameend
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/blog/*/', :rep => :mp3 do filter :say filter :lameend
route '/blog/*/', :rep => :mp3 do
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/blog/*/', :rep => :mp3 do filter :say filter :lameend
route '/blog/*/', :rep => :mp3 do item.identifier.chop + '.mp3'end
Voordelen
Statische web sites zijn snel!
% curl -I http://nanoc.stoneship.org/
HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Accept-Ranges: bytesETag: "4207500908"Last-Modified: Sun, 10 Jun 2012 19:16:38 GMTContent-Length: 3418Date: Mon, 16 Jul 2012 09:45:17 GMTServer: lighttpd/1.4.31
Bekijk je web sitein voorvertoningvoor ze live te gooien
Gebruik je favorietetext/code editor (vim dus)
Hou je niet bezigmet security updates
Update softwarezonder vrees dat je siteonbereikbaar wordt
Maak je geen zorgen overeen vergeten mysqldumpbij het maken van backups.
Onthoud de historiek:steek je website in een versiecontrolesysteem
Werk samen aan een site
Maak verschillendebranches van je site.
Leuke nanoc Features
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
nanoc deploy
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
nanoc deploy --target=staging
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
deploy:
default: kind: rsync dst: "ectype:sites/nanoc"
staging: kind: rsync dst: "ectype:sites/nanoc-staging"
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
nanoc check
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
nanoc check
Soon!
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
compile '/assets/style/*/' do filter :sass, Compass.sass_engine_options
filter :relativize_paths, :type => :css filter :rainpress
end
% nanoc check ilinks elinksLoading site data...
Running internal_links checker... errorRunning external_links checker... ok
output/blog/21/index.html: [ ERROR ] internal_links - reference to ../../docs/api/3.1/
output/docs/6-guides/index.html: [ ERROR ] internal_links - reference to ../api/3.4/
… etc …
Demo Time!
Bijna Gereed
Google “nanoc”
freenode #nanoc
Q & A
Danku! ♥