Notice: Not maintained anymore, docker is better suited for such deployments
This Ansible role installs a service for Unicorn, with RVM and multiple application support
Expects rvm to be installed system-wide
-
rvm_rootdefaults to/usr/local/rvm -
rvm_exedefaults to/usr/local/rvm/bin/rvm -
rails_appsdefaults to[]Each rails_apps entry is a dict with the following options
-
name(egmy_app, required) -
ruby_version(egruby-2.1.1, required) -
envdefaults toproduction -
rootdefaults to/var/www/{{ name }}/current(Capistrano compatible) -
configis used fordbandsecrets, defaults to{{ root }}/configif root is specified, otherwise to/var/www/{{ name }}/shared/config -
dbis a dict for generating adatabase.ymlfile, with options:adapterdefaults topostgresqlhostdefaults tolocalhostdatabasedefaults to app nameusernamedefaults to app namepassworddefaults to app namepooldefaults to5timeoutdefaults to5000
-
secretsis a dict and all its keys are converted to secrets.yml
-
The role could be included in a playbook as follows:
---
-hosts: application
roles:
- role: unicorn-rvm
rails_apps:
- { name: 'my_app1', ruby_version: 'ruby-1.9.3' }
- { name: 'my_app2', ruby_version: 'ruby-2.1.1', root: '/var/test_apps/app2', env: staging }
- name: 'my_app3'
ruby_version: 'ruby-2.1.1'
db:
password: topsecret
secrets:
secret_key_base: SuperSecretHexStringIf the init script is called without any config parameters, it will attempt to run the init command for all unicorn configurations listed in /etc/unicorn/*.conf
/etc/init.d/unicorn start # starts all unicorns
If you specify a particular config, it will only operate on that one
/etc/init.d/unicorn start my_app
This role does not deploy the actual application, it assumes that this will be done in another role or using a deployment tool such as Capistrano.
However you deploy, keep in mind that this setup expects each application to use an rvm gemset with the name of the application.
So for example, for a Capistrano 3 deployment of an app called 'my_app'
under ruby 2.1.1, you should require 'capistrano/rvm' and set the following
in your Capistrano configuration:
set :rvm_ruby_version, '2.1.1@my_app'
If you use this role to generate database.yml and secrets.yml, it is advised to store the keys in an ansible vault file
MIT