I just pushed a change for my teammates: we’re now using Bundler on our Rails 2.3.5 application. Things went rather well, but our continuous testing server choked a bit on that.
First, I had forgotten to run bundle install after pulling changes. Then I had to ignore our cucumber environment, because it depends on rb-appscript which is a native gem on Mac OS X. Our CT machine is a Linux box, hence the change. Then, bundle install would fail installation because it didn’t have sudo access:
1 Fetching git://github.com/bloom/rails.git
2 Fetching git://github.com/francois/active_url
3 Fetching git://github.com/francois/safariwatir.git
4 Fetching source index for http://rubygems.org/
5 sudo: no tty present and no askpass program specified
6 sudo: no tty present and no askpass program specified
7 Using rake (0.8.7)
8 sudo: no tty present and no askpass program specified
9 sudo: no tty present and no askpass program specified
10 /usr/lib64/ruby/site_ruby/1.8/rubygems/format.rb:38:in `from_file_by_path’: Cannot load gem at [/usr/lib64/ruby/gems/1.8/cache/SystemTimer-1.2.gem] in /home/francois/adgear-admin (Gem::Exception)
11 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/source.rb:77:in `fetch‘
12 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/installer.rb:45:in `run’
13 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/spec_set.rb:12:in `each’
14 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/spec_set.rb:12:in `each‘
15 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/installer.rb:44:in `run’
16 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/installer.rb:8:in `install’
17 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/cli.rb:185:in `install‘
18 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/vendor/thor/task.rb:22:in `send’
19 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/vendor/thor/task.rb:22:in `run’
20 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/vendor/thor/invocation.rb:118:in `invoke_task‘
21 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/vendor/thor.rb:246:in `dispatch’
22 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/lib/bundler/vendor/thor/base.rb:389:in `start’
23 from /usr/lib64/ruby/gems/1.8/gems/bundler-1.0.0.rc.5/bin/bundle:13
24 from /usr/bin/bundle:19:in `load’
25 from /usr/bin/bundle:19
26
I was busy writing a message to the Ruby Bundler Google Group when I remembered bundle install has an optional parameter which specifies where the bundle should be installed. I changed my CT script to run bundle install --without=cucumber vendor/gems and bundle did it’s magic, and my CT box started running tests.
Much rejoicing ensued.
For the record, here’s our testing script:
1 #!/bin/bash
2 cd /home/francois/adgear-admin
3
4 if [z $1 ] ; then%m-%d-%H:%M`
5 echo "Can’t proceed if I don’t know which branch to test"
6 exit 1
7 fi
8
9 TSTAMP=`date +%Y
10 BRANCH=$1
11 LOG=/home/francois/build-logs/$BRANCH-$TSTAMP.log
12
13 (
14 git fetch origin && \
15 git reset-hard origin/$BRANCH && \$BRANCH — http://ct.local:9001/logs/$BRANCH/$TSTAMP\"}}"
16 echo ======= && \
17 git show && \
18 ( bundle install —without=cucumber vendor/cache || true ) && \
19 nice rake db:adgear:production:update parallel:prepare parallel:test
20 ) > $LOG 2>&1
21
22 if [ "$?" = "0" ] ; then
23 /usr/bin/curl -s -o /dev/null -d "{\"message\":{\"body\":\"Test Suite Passed -HContent-Type:application/json -u 12345:X http://oursite.campfirenow.com/room/12345/speak.json$BRANCH — http://ct.local:9001/logs/$BRANCH/$TSTAMP\"}}" -HContent-Type:application/json -u 12345:X http://oursite.campfirenow.com/room/12345/speak.json
24 else
25 /usr/bin/curl -s -o /dev/null -d "{\"message\":{\"body\":\"Test Suite FAILED -
26 fi
27
28 # vi: sw=8 ts=8 expandtab
This script is run from cron.