Commit 8639b8c1785578524fa49ca961f4ae8633e986a5

Authored by Will Farrington
1 parent 8d4aea0b5b

get doc-wild

Showing 2 changed files with 217 additions and 0 deletions Side-by-side Diff

docs/personal-configuration.md
  1 +# Personal Configuration
  2 +
  3 +One of the design choices of Boxen very early on was that we didn't want to
  4 +dictate down to users "you can do this, but you can't do that".
  5 +We do so as little as possible in the core, and we don't do it at all for
  6 +per-user configurations.
  7 +
  8 +How? The personal manifest.
  9 +
  10 +Personal manifests live in `modules/people/manifests/<name>.pp`,
  11 +where `<name>` is your GitHub username.
  12 +A basic personal manifest might look like so:
  13 +
  14 +``` puppet
  15 +class people::wfarr {
  16 + notify { 'hello world': }
  17 +}
  18 +```
  19 +
  20 +Now, each time `wfarr` runs Boxen it'll automatically print out "hello world"
  21 +somewhere during the run.
  22 +You can even run `boxen-my-config` to generate a default template for you
  23 +and open it up in your editor.
  24 +When you're done, you can simply run `boxen` and it'll include your changes
  25 +in your personal manifest.
  26 +**You should always keep your manifest committed and pushed to your repository**.
  27 +Otherwise, auto-updates won't work!
  28 +
  29 +You can check out the [projects README](../modules/projects/README.md) for further examples.
  1 +# Using Boxen with Rails Projects
  2 +
  3 +Boxen is designed to work extremely well with Rails.
  4 +Let's break down some of the basics:
  5 +
  6 +## Project Management
  7 +
  8 +We make a few assumptions about how you run Rails in development for ease and consistency:
  9 +
  10 +* You use a web server that listens on a socket
  11 +* You use environment variables and something like [dotenv](https://github.com/bkeepers/dotenv) for managing secrets
  12 +
  13 +A typical Rails app that uses things like MySQL, Resque, and phantomjs
  14 +might have a [project definition](../modules/projects/README.md) like so:
  15 +
  16 +``` puppet
  17 +class projects::rails_app {
  18 + include phantomjs
  19 +
  20 + boxen::project { 'rails_app':
  21 + source => 'mycompany/rails_app',
  22 + ruby => '1.9.3',
  23 + mysql => true,
  24 + redis => true,
  25 + nginx => true,
  26 + }
  27 +}
  28 +```
  29 +
  30 +This does a few things for you:
  31 +
  32 +* Clones `https://github.com/mycompany/rails_app.git` to `~/src/rails_app`
  33 +* Ensures the default 1.9.3 version of Ruby is installed
  34 +* Creates `~/src/rails_app/.ruby-version` with `1.9.3` in it
  35 +* Ensures mysql is installed and running
  36 +* Creates two mysql databases: `rails_app_test` and `rails_app_development`
  37 +* Ensures redis is installed and running
  38 +* Ensures nginx is installed and running
  39 +* Copies the [template nginx config](../modules/projects/templates/shared/nginx.conf.erb) into the nginx config dir
  40 +
  41 +It won't necessarily do all of them in that order, but it will gaurantee
  42 +that if they run successfully they're all done in a correct order.
  43 +
  44 +See the section below for some handy configuration tips on how to configure
  45 +your app best to work with Boxen.
  46 +
  47 +## Configuration
  48 +
  49 +### MySQL
  50 +
  51 +``` yaml
  52 +# config/database.yml
  53 +
  54 +<%
  55 + def boxen?; ENV['BOXEN_HOME']; end
  56 +
  57 + socket = [
  58 + ENV["BOXEN_MYSQL_SOCKET"],
  59 + "/var/run/mysql5/mysqld.sock",
  60 + "/tmp/mysql.sock"
  61 + ].compact.detect { |f| File.exist? f }
  62 +
  63 + port = ENV["BOXEN_MYSQL_PORT"] || "3306"
  64 +%>
  65 +
  66 +development:
  67 + adapter: mysql2
  68 + database: rails_app_development
  69 + username: root
  70 + password:
  71 +<% if socket %>
  72 + host: localhost
  73 + socket: <%= socket %>
  74 +<% else %>
  75 + host: 127.0.0.1
  76 + port: <%= port %>
  77 +<% end %>
  78 +
  79 +test:
  80 + adapter: mysql2
  81 + database: rails_app_test
  82 + username: root
  83 + password:
  84 +<% if socket %>
  85 + host: localhost
  86 + socket: <%= socket %>
  87 +<% else %>
  88 + host: 127.0.0.1
  89 + port: <%= port %>
  90 +<% end %>
  91 +```
  92 +
  93 +### PostgreSQL
  94 +
  95 +``` yaml
  96 +# config/database.yml
  97 +
  98 +development:
  99 + adapter: postgresql
  100 + database: rails_app_development
  101 + encoding: unicode
  102 + port: <%= ENV["BOXEN_POSTGRESQL_PORT"] || 5432 %>
  103 + host: localhost
  104 +
  105 +test:
  106 + adapter: postgresql
  107 + database: rails_app_test
  108 + encoding: unicode
  109 + port: <%= ENV["BOXEN_POSTGRESQL_PORT"] || 5432 %>
  110 + host: localhost
  111 +```
  112 +
  113 +### Redis
  114 +
  115 +``` ruby
  116 +# config/initializers/redis.rb
  117 +
  118 +$redis = Redis.new(ENV['BOXEN_REDIS_URL'] || 'redis://localhost:6379/')
  119 +```
  120 +
  121 +### Elasticsearch
  122 +
  123 +``` ruby
  124 +# config/initializers/elasticsearch.rb
  125 +
  126 +Tire.configure do
  127 + url (ENV['BOXEN_ELASTICSEARCH_URL'] || 'http://localhost:9200/')
  128 +end
  129 +```
  130 +
  131 +### MongoDB
  132 +
  133 +``` yaml
  134 +# config/mongo.yml
  135 +
  136 +development:
  137 + host: 127.0.0.1
  138 + port: <%= ENV['GH_MONGODB_PORT'] || 27017 %>
  139 + database: rails_app_development
  140 +
  141 +test:
  142 + host: 127.0.0.1
  143 + port: <%= ENV['GH_MONGODB_PORT'] || 27017 %>
  144 + database: rails_app_test
  145 +```
  146 +
  147 +### Memcached
  148 +
  149 +``` ruby
  150 +# config/initializers/memcached.rb
  151 +
  152 +$memcached = Dalli::Client.new(
  153 + ENV['BOXEN_MEMCACHED_URL'] || 'memcached://localhost:11211/'
  154 +)
  155 +```
  156 +
  157 +### Unicorn
  158 +
  159 +``` ruby
  160 +# config/unicorn.rb
  161 +
  162 +if ENV['RACK_ENV'] == 'development'
  163 + worker_processes 1
  164 + listen "#{ENV['BOXEN_SOCKET_DIR']}/rails_app", :backlog => 1024
  165 + timeout 120
  166 +end
  167 +
  168 +after_fork do |server, worker|
  169 + ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
  170 +end
  171 +```
  172 +
  173 +``` shell
  174 +# script/server
  175 +
  176 +#!/bin/sh
  177 +
  178 +set -e
  179 +
  180 +cd $(dirname "$0")/..
  181 +: ${RAILS_ENV:=development}
  182 +: ${RACK_ENV:=development}
  183 +
  184 +export RAILS_ENV RACK_ENV
  185 +
  186 +bin/unicorn_rails -E "$RAILS_ENV" -c config/unicorn.rb
  187 +```