Slide 1

Slide 1 text

Rails Software Development ! with Chef and Vagrant ! ! ! ! ! ! ! ! ! Martin Fenner Technical Lead, PLOS Article-Level Metric Project https://github.com/mfenner http://en.wikipedia.org/wiki/Chef

Slide 2

Slide 2 text

https://github.com/articlemetrics/alm-report

Slide 3

Slide 3 text

http://www.flickr.com/photos/jeffhester/77728574/ Dev/Prod Parity Keep development, staging, and production as similar as possible! http://12factor.net/dev-prod-parity

Slide 4

Slide 4 text

Dev Environment == Production Then you can’t develop on a Mac?

Slide 5

Slide 5 text

Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed. RVM is a command-line tool which allows you to easily install, manage, and work with multiple ruby environments from interpreters to sets of gems. Homebrew installs the stuff you need that Apple didn’t. RubyGems is a package manager for the Ruby language. Good, but not good enough

Slide 6

Slide 6 text

These two make a difference Automation Virtualization http://en.wikipedia.org/wiki/Max_and_Moritz

Slide 7

Slide 7 text

3 Dev Environment == Production Automation! Shell! Ansible! CFEngine! Chef! Puppet! Salt! Docker Virtualization! Virtualbox! VMware! AWS! Rackspace! Digital Ocean! Hyper-V! Docker https://www.vagrantup.com/ Vagrant is a tool for building complete development environments

Slide 8

Slide 8 text

Dev Environment == Production https://xkcd.com/

Slide 9

Slide 9 text

Dev Environment == Production https://xkcd.com/ Vagrant Core Concepts Code and configuration management is under version control. Clone a repo and get started. Shared Folders Host and guest Virtual Machine share access to the project code. Use your favorite editor for development and see changes immediately. Keep it Simple Dramatically reduce the learning curve to configure a Virtual Machine and run IT automation software. No Vendor Lock-in Open source software (VMware plugin is commercial). Flexibility in virtualization and automation tools.

Slide 10

Slide 10 text

The Future! But not much help for developing single web applications on a Mac https://www.docker.com/

Slide 11

Slide 11 text

https://downloads.getchef.com/chef-dk

Slide 12

Slide 12 text

https://downloads.getchef.com/chef-dk A cookbook is the fundamental unit of configuration and policy distribution.! ! Cookbooks are written in Ruby, using the Chef DSL.! ! The Chef Supermarket is the central community resource for cookbooks.! https://supermarket.getchef.com/! ! Berkshelf and Librarian-Chef are two popular tools to manage cookbook installation and dependencies.! http://berkshelf.com/! https://github.com/applicationsonline/librarian-chef! Chef Cookbooks

Slide 13

Slide 13 text

Dev Environment == Production Chef Recipes https://github.com/articlemetrics/alm_report-cookbook This recipe installs and configures the ALM Reports Ruby on Rails application.

Slide 14

Slide 14 text

Dev Environment == Production https://github.com/articlemetrics/mysql_rails-cookbook/blob/master/providers/default.rb Chef Resource (LWRP) Trend is to use resources instead of recipes.

Slide 15

Slide 15 text

Dev Environment == Production Chef Attributes https://github.com/articlemetrics/ruby-cookbook/blob/master/attributes/default.rb Although there many standard cookbooks, best practices are still emerging.

Slide 16

Slide 16 text

http://kitchen.ci/ Test Kitchen

Slide 17

Slide 17 text

Dev Environment == Production Serverspec https://github.com/articlemetrics/passenger_nginx-cookbook/blob/master/test/integration/default/serverspec/nginx_spec.rb Test-driven development for infrastructure code.

Slide 18

Slide 18 text

Dev Environment == Production Further Reading Pivotal Sprout! Chef recipe to configure an OS X Mavericks developer workstation! https://github.com/pivotal-sprout Customizing Chef! Chef for cookbook authors. August 2014! http://shop.oreilly.com/product/0636920032984.do Vagrant Blog! Feature Preview: Docker-Based Development Environments! https://www.vagrantup.com/blog/feature-preview-vagrant-1-6- docker-dev-environments.htm