Thin_Upstart
This is an alternative to Foreman + Upstart generating your Upstart conf files. It ignores your Procfile, and insteads uses your Thin .yml config file. The following files are generated (assuming you call your group of Thin apps 'web-app'):
# App dirs
|- app1
|- app2
# Template dir
|- {{name}}.conf
|- {{name}}-{{app}}.conf
# Files generated
|- output-dir
|- web-apps.conf
|- web-apps-app1.conf
|- web-apps-app2.conf
|- ...
Tip
Check the format of your Upstart files when you copy them to /etc/init using this command:
sudo initctl check-config --warn App-Name
Installation
gem install Thin_Upstart
Usage: Ruby
require "Thin_Upstart"
Thin_Upstart { |o|
o.name "web-apps"
o.apps "./apps"
o.templates "./templates/*.conf" # file glob
o.output "./upstart"
o.yml "config/thin.yml"
o.kv Hash[] # Custom key/value for your mustache templates.
}
If you want to delete files generated by Thin_Upstart, use:
Thin_Upstart.trash "my/conf/dir"
All files that end in ".conf" are deleted if they contain the following string:
# Generated by Thin_Upstart
Usage: Shell
Thin_Upstart
--name web-apps
--apps ./apps
--templates ./templates
--yml config/thin.yml
--output ./output
--kv " custom_1 => val_1 , custom_2 => val_2 , ... "
--trash my/conf/dir # When used, all other options are ignored.
--help
Note: Be sure to use quotation marks when using file globs or --kv:
Thin_Upstart --templates "template/*.conf"
Thin_Upstart --yml "config/*.yml"
Thin_Upstart --kv " custom_1 => val_1 , custom_2 => val_2 , ... "
When using the --kv option on the shell, you are limited to using the above format. This means you can put any values using commas:
Thin_Upstart --kv " custom_1 => val 1 , custom_2 => val 2 "
# This hash is generated based on the above line:
# {
# 'custom_1' => "val 1",
# 'custom_2' => 'val 2'
# }
Usage: Mustache Template
In your Mustache templates, you have access to the following values:
- name: Name of app group: e.g. My-Web-Apps
- app: Name of current app: e.g. Blog
- yml: Relative path from current app directory to .yml file
- app_path: Full path to app.
- yml_path: Full path to .yml file.
- apps_dir: Full path to directory of apps.
- your custom values: Use method :kv with an argument of a hash.
You can use Mustache values in the file names of the templates. For example:
- my/template/dir/{{name}}.conf
- my/template/dir/{{name}}-{{app}}.conf
Run Tests
git clone git@github.com:da99/Thin_Upstart.git
cd Thin_Upstart
bundle update
bundle exec bacon spec/main.rb
"I hate writing."
If you know of existing software that makes the above redundant, please tell me. The last thing I want to do is maintain code.