Without exaggeration single button deploys and one line installs have changed my dev life. Read on to find out why. I'll note a few of the configuration management tools I use on OS X and why I chose them towards the end of the post.
preface
Ever since I made the decision and effort to bring ideas to life through web apps, fortune has smiled upon my enthusiasm and placed generous allies along my way. It was only last year that I accepted that I'm on a life long journey, with no promise of a payoff beyond the satisfaction of the struggle. A sunk startup is a humbling and grounding experience, and I suggest everyone go through it exactly once ;).
When I was clueless how to begin development and irresistibly drawn to build my first web app, a good friend and partner materialized out of crossing real time updates, and showed me that I need to get my hands dirty. When I wanted to better understand distributed social networks, I was introduced to open social protocols which transcend corporate silos. When I wanted to leverage and learn from social coding, I was pointed to git and github. For endless questions about development tool installation and configuration I rely on personal blogs, web docs, and the community at StackOverflow. The personal productivity boons that have minimized my dev iteration time and kept me sane in a world of endless options, are one button deploys, and one line installation scripts.
One button deploys
There's nothing that compares to Heroku's ease of use and deployment ruby projects. From the homepage:
Create Heroku apps instantly:
$ sudo gem install heroku $ heroku create sushi Created http://sushi.heroku.com/ git@heroku.com:sushi.git
Full deployment is simply a git push:
$ git push heroku master -----> Heroku receiving push -----> Rails app detected -----> Launching..... done http://sushi.heroku.com deployed
Everything apps need and more, all manageable by API:
$ heroku sharing:add fugu@sushi.com $ heroku domains:add sushi.com $ heroku rake db:migrate $ heroku db:push $ heroku addons:add memcache
Deploying static pages to github is a simple one line deploy with github pages. Note to self, setup a landing page for victusfate.github.com.
EngineYard comes close for easy deploys with Ruby stacks and more flexibility after setting them up, but has a minimum monthly subscription (it cost us $70 a month). I've heard that Rackspace, Amazon, and several other hosts have developer friendly environments. I have a homework/side project to kick up a jruby/rails app on aws to see how it goes.
I have hands on experience deploying to the Google App Engine, which is fine for python or Java but slightly less friendly to JVM language stacks like JRuby or Scala due to a slow JVM warm up time. I'd really like to see one button/line deploys commoditized with a Freemium model and low to zero infrastructure switching costs.
One line install scripts
I have synchronized dev environments on my iMac desktop and Macbook Air. Dropbox and git keeps my code in synch, but I manually maintain development tools on both systems. The following utilities make my job much simpler. If you're developing on Linux you may use apt-get, debian packages, or yum. Since I primarily develop on OS X I rely on homebrew as a general package tool, but have specific favorites for different languages/frameworks.
- For Ruby:
I use rvm as an incredible environment management tool. I shed a single tear after finding out rvm isn't available for my windows friends, but there are alternatives (pik or dedicated specific ruby loaded cmd shells). I can swap ruby interpreters or compilers with their associated gem sets on the fly. Speaking of which, gem is another amazing library utility which grabs required tools and dependencies on the fly. Bundler is a great gem packaging system which works just as well with the java virtual machine deploys on the google app engine, or tuned Badious Bamboo environments of - For node.js:
The nvm provides as a similar role as rvm. The npm node package manager serves as a node utility tool like gem for Rubyists. - For python:
I'm new to node and python but there are amazing packages that make them worth learning. I tried virtualenv for isolated python environments and packages but prefer pythonbrew for it's similarity to rvm and nvm.
If you have your own favorite configuration time saving hacks I'd love to hear about them in the comments.