Blog Posted February 11, 2013

Streamlined Rails Gem Updates on Gem in a Box

Problem: Per recent Ruby on Rails security patches, you need to update your Rails applications. However, because you host Rails and its related gems on a private Gem in a Box gem server, it’s a bit cumbersome to manually download the necessary gems from Rubygems.org, and then upload them to your Gem in a Box gem server.

Solution: bash and curl.

1. List the necessary gems in a gems.txt file:

1
2
3
4
5
6
7
8
9
rails
actionmailer
activemodel
actionview
actionpack
activerecord
activeresource
activesupport
railties

2. Create a bash script in a get_gems.sh file to retrieve the gems from Rubygems.org. Note that I’ve created a VERSION variable specifying the desired gems’ version.

1
2
3
4
5
6
7
#!/bin/bash

VERSION=4.1.8

for ARG in `cat $1`; do
  curl -L "http://rubygems.org/downloads/$ARG-$VERSION.gem" > "$ARG-$VERSION.gem"
done

3. Create a bash script in a post_gems.sh file to post the downloaded gems to your Gem in a Box. Note that I’ve created a VERSION variable specifying the desired gems’ version here too.

1
2
3
4
5
6
7
#!/bin/bash

VERSION=4.1.8

for ARG in `cat $1`; do
  curl -v -X POST -F file=@$ARG-$VERSION.gem http://YOUR_GEM_IN_A_BOX_USERNAME:YOUR_PASSWORD@YOUR_GEM_IN_A_BOX.com/upload
done

Usage

Download gems:

1
./get_gems.sh gems.txt

Upload gems:

1
./post_gems.sh gems.txt