Exposing a directory via webrick

Skip to first unread message

Lukas Zapletal

Jan 18, 2022, 11:38:25 AM1/18/22
to nanoc

we have a nanoc site in ./web and then bunch of guides (documentation) in ./guides/build. I would like nanoc's web server to publish ./guides/build under path /nightly as well as /X.Y. Is this possible without any plugin? Or how would I do this?

Thanks for help, this is our site:


Denis Defreyne

Jan 25, 2022, 3:58:46 AM1/25/22
to noreply-spamdigest
Hey Lukas,

Would it be a solution to use multiple #write directives? For example:

compile '/guides/build/*.md' do
  filter :kramdown
  write '/12.7/'    + item.identifier.without_ext.split('/').last + '/index.html'
  write '/nightly/' + item.identifier.without_ext.split('/').last + '/index.html'

You’ll have to adjust it to make it work for your specific use case, but that’s the gist of it. Lemme know how that works.


Denis Defreyne
[dəˈni] • pronouns: he/him

You received this message because you are subscribed to the Google Groups "nanoc" group.
To unsubscribe from this group and stop receiving emails from it, send an email to nanoc+un...@googlegroups.com.

Lukas Zapletal

Jan 25, 2022, 8:55:35 AM1/25/22
to na...@googlegroups.com

sorry I did not make it clear earlier, but build artifacts are
generated by something else (asciidoctor books) and are actually just
HTML files with images. I do not want to build them via Nanoc, just
publish them (make them available through webrick when testing the
site). I was hoping for some trick just to tell the webserver to
publish them. I tried to create symlinks via Ruby in Rules but Nanoc
hated it :)

Thanks for help!

> You received this message because you are subscribed to a topic in the Google Groups "nanoc" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/topic/nanoc/9N5FP2R8m2o/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to nanoc+un...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/nanoc/9b206222-2d42-43af-b791-2e7acb201b54%40www.fastmail.com.

Lukas @lzap Zapletal

Denis Defreyne

Feb 12, 2022, 5:33:33 AM2/12/22
to noreply-spamdigest
Hi Lukas,

There’s no trivial way to tell the web server to serve files from two locations. You could create your own Rack config.ru file which uses Rack::Builder with Rack::File and Adsf::Rack::IndexFileFinder (see https://github.com/ddfreyne/adsf#indexfilefinder). But that’s not the most straightforward, for sure.

Alternatively, you could compile the Asciidoctor books into content/ anyway, and then use Nanoc’s `passthrough` rule (https://nanoc.app/doc/rules/#convenience-methods) to copy those compiled Asciidoctor files as-is to output/. That might reflect better how you deploy your site, too (it is the approach I use when I use other tools in combination with Nanoc). It’d look something like this:

1. Use asciidoctor with `--destination-dir`:

asciidoctor --destination-dir=content/book

2. Set up Nanoc’s rules to copy everything in /book recursively, as-is:

passthrough "/book/**/*"

There are variations available for that too, like matching all of /content/**/* and then writing them to a different path (using `compile` and `write`). Hope that helps!


Denis Defreyne
[dəˈni] • pronouns: he/him

+49 1573 1969 173
> https://groups.google.com/d/msgid/nanoc/CAP80Qm3EtaG1BrZTeomUFUEt4GprScVx_QxDbsVqw_hbwh0A%3Dg%40mail.gmail.com.
Reply all
Reply to author
0 new messages