Commit 8639b8c1785578524fa49ca961f4ae8633e986a5
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. |
docs/rails.md
| 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 | +``` |