Asciidoctor encompasses and builds an ecosystem around Asciidoc for writing documentation, and well, writing anything. If you want to host your own blog, documentation site, book, ect.., Asciidoctor would be an excellent choice. If you want to do that in OpenShift, that is what I'm going to help you with.
Getting Started
Create a Sinatra ruby gear or on the command line.
rhc app create mydocs sinatra ruby-2.0
The current sinatra-example is geared for ruby 1.9 current, https://github.com/openshift/. It could be modified to work with 2.0 but I will focus on 1.9 here.
rhc app create mydocs ruby-1.9 --from-code https://github.com/openshift/sinatra-example.git
You may or may not need to clone the project, it should auto-clone it unless there was a timeout.
rhc git-clone mydocs cd mydocs
Set your environment up so the bundler won't install dev dependencies.
rhc env set BUNDLE_WITHOUT=development -a mydocs
This gives us a base Sinatra project to work with. Now let's add Asciidoctor to the mix.
Configure Ruby for Asciidoctor
Add the Asciidoctor gem and development gems to bundler and bundle. Your Gemfile should look like:
source 'https://rubygems.org' gem 'sinatra' gem 'asciidoctor' group :development do gem 'guard' gem 'guard-shell' gem 'guard-livereload' end
Now Install those new gems, this will also trigger a new bundle install when you push since the Gemfile.lock will change.
bundle install
Write an Asciidoc file
Create a folder for your Asciidoc files, let's call it adocs.
mkdir adocs
Create an adocs/index.adoc, open it up and paste in:
= Introduction :linkcss: :toc: left Welcome to my documentation! == Heading 1 === Sub Heading 1 == Heading 2 === Sub Heading 1 === Sub Heading 2
Development and LiveReload
Create a Guardfile in the project root. The :safe => :unsafe is for the injection of asciidoctor.css into the html. This Guardfile will watch for changes to the index.adoc and compile it to the public dir.
require 'asciidoctor' guard 'shell' do watch(/^adocs/index.adoc$/) {|m| Asciidoctor.convert_file(m[0], :to_dir => "public", :safe => :unsafe) } end guard 'livereload' do watch(%r{^public/.+.(css|js|html)$}) end
Add public/index.html and public/asciidoctor.css to .gitignore as Asciidoctor will be invoked on push. The benefit to this setup is your generated html will not pollute git, it will be generated on push.
echo "public/index.html" >> .gitignore echo "public/asciidoctor.css" >> .gitignore
Install the LiveReload browser extension then guard start http://asciidoctor.org/docs/editing-asciidoc-with-live-preview/
guard start
Click on the Live Reload icon in the browser, in the Guard console you should see:
[1] guard(main)> 13:30:31 - INFO - Browser connected.
Now you can live edit the index.adoc and see updates in the browser. You will need to navigate to the file in your browser. In my case I went to the url: file:///Users/smendenh/Projects/mydocs/public/index.html
Production
Add a .openshift/action_hooks/build file which will be responsible for invoking Asciidoctor to generate the html.
mkdir -p .openshift/action_hooks vim .openshift/action_hooks/build
#!/bin/bash pushd $OPENSHIFT_REPO_DIR > /dev/null bundle install --path ./vendor/bundle --without development bundle exec ruby -C${OPENSHIFT_REPO_DIR} -rasciidoctor -e "Asciidoctor.convert_file('adocs/index.adoc', :to_dir => 'public', :safe => :unsafe)" popd > /dev/null
Test it out!
Edit the adocs/index.adoc file, change anything.
git commit -a -m "Simple update" git push
Wait for the push to finish then hit the openshift url for your gear in the browser and see your changes.
Other ideas for Asciidoctor on OpenShift
You can use Asciidoctor in many languages, be it Java, Ruby, Javascript, ect... Hooking in Asciidoctor to the Sinatra gear was simple and straight forward, the documentation on the Asciidoctor.org site was a fantastic help. There is around a 30 second delay in git push, that is minor, but if you wanted an even faster means of hosting an Asciidoctor based OpenShift gear you could use the Nginx gear and push the generated html. I've done that, and it is incredibly fast to push to and update.
Last updated: May 29, 2023