I just changed jobs and am now a Rails developer at tolingo.com, which is an online translation broker. When I started out working on my new desk, I had to setup my iMac development environment. There are tons of articles of how to compile/install/run stuff like MySQL, to get you started on OS X, but I think all one really needs is Homebrew and RVM.
Homebrew
Homebrew is a Ruby based packaging tool for Mac and once you start using it, you immediately hate yourself for having wasted time on MacPorts…
“Homebrew is the easiest and most flexible way to install the UNIX tools Apple didn’t include with OS X.”
This quote is from the official website and I guess they are absolutely right!
Formula
Homebrew is build around formulas. They describe how a package should be loaded from the web and installed on your system. It also cares about package dependencies, paths and all the other ugly stuff:
require 'formula'
class Wget < Formula
homepage 'http://www.gnu.org/wget/'
url 'http://ftp.gnu.org/wget-1.12.tar.gz'
md5 '308a5476fc096a8a525d07279a6f6aa3'
def install
system "./configure --prefix=#{prefix}"
system 'make install'
end
end
You can easily install packages from the shell with brew:
brew install wget
Homebrew puts all the packages into ‘/usr/local’, so that it won’t interfer with other components of your system. To get your packages working, you need to include it into your $PATH. If you have any problems running something, Homebrew comes with the doctor command, that scans for problems in your setup!
Installation
Just download Homebrew to your system and update once a while:
# install homebrew via curl
sudo mkdir -p /usr/local && sudo chown -R $USER /usr/local && curl -Lsf http://bit.ly/9H4NXH | tar xvz -C/usr/local --strip 1
# update homebrew
brew update
Git, MySQL, Sphinx and more
What else do you need? Just search for it or get more infos with info!
These are the packages that I needed for development:
# install mysql and set it up
brew install mysql
mysql_install_db
# add mysqld as launch agent
cp /usr/local/Cellar/mysql/#{MYSQL_VERSION}/com.mysql.mysqld.plist ~/Library/LaunchAgents
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
# install git
brew install git git-flow
# add git bash completion (find path to your git with 'brew info git')
ln -s /usr/local/Cellar/git/#{GIT_VERSION}/etc/bash_completion.d/git-completion.bash ~/.git-completion.bash
source .git-completion.bash
# install sphinx search-deamon
brew install sphinx
# aspell with all spellings
brew install aspell --all
# libxml and imagemagick for sprites
brew install libxml2 imagemagick
RVM the Ruby Version Manager
RVM is a command line tool for managing your local Ruby environments, you can get some more information on the RVM homepage and in earlier articles.
Quick start with installing RVM to your machine:
# install rvm via curl !!! FOLLOW RVM INSTRUCTIONS !!!
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
# download and compile latest 1.8.7
rvm install 1.8.7
# create a .rvmrc file in your app's base directory
echo "rvm use 1.8.7@#{YOUR_APP} --create" > #{YOUR_APP}/.rvmrc
# execute it by cd-ing to your app's directory
cd #{YOUR_APP}
Now you can work on your app with a custom gem environment. Unless you are using Bundler, this is probably what you want for installing and removing gems painlessly.
Cucumber with Celerity
Behavior driven development with Cucumber works nicely with Celerity, a JRuby implementation of a headless browser using HtmlUnit and it’s companion a Ruby wrapper called Culerity. Culerity has recently been updated with some configuration points for registering your local JRuby environment:
# jruby config für culerity (from http://rvm.beginrescueend.com/integration/culerity/)
rvm install jruby
rvm use jruby@celerity --create
gem install celerity
rvm wrapper jruby@celerity celerity jruby
# add to .profile
export JRUBY_INVOCATION="$(readlink "$(which celerity_jruby)")"
If you are experiencing any weird Broken Pipe errors (like me), have a look at this issue.
This is just an example of how you can setup your Rails development environment. Comments on this topic are appreciated!