I host my personal projects in gitlab because it’s free and it gives you free runners for your ci.ย I recently started studying the Hanami framework in ruby and when it was time to build the test suite, I initially couldn’t properly get it to work because of a strange error.
My initial gitlab-ci.yml was as follows
image: ruby:2.5
services:
- postgres:latest
variables:
DATABASE_URL: 'postgresql://postgres/budget_tracker_test'
POSTGRES_DB: budget_tracker_test
HANAMI_ENV: test
cache:
paths:
- vendor/ruby
rspec:
before_script:
- gem install bundler --no-ri --no-rdoc
- bundle install -j $(nproc) --path vendor --quiet
script:
- echo 'Trying to create db for develop'
- bundle exec hanami db prepare
- echo 'Trying to create db for test'
- HANAMI_ENV=test bundle exec hanami db prepare
- rspec spec
Pretty straightforward right? But for some reason I was encountering this error:
Could not find executable in your PATH: `createdb` /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator/postgres_adapter.rb:104:in `rescue in call_db_command' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator/postgres_adapter.rb:97:in `call_db_command' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator/postgres_adapter.rb:36:in `create' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator.rb:287:in `create' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator.rb:332:in `prepare' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-model-1.2.0/lib/hanami/model/migrator.rb:247:in `prepare' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-1.2.0/lib/hanami/cli/commands/db/prepare.rb:26:in `prepare_database' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-1.2.0/lib/hanami/cli/commands/db/prepare.rb:17:in `call' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-1.2.0/lib/hanami/cli/commands/command.rb:85:in `call' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-cli-0.2.0/lib/hanami/cli.rb:57:in `call' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/gems/hanami-1.2.0/bin/hanami:6:in `<top (required)>' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/bin/hanami:23:in `load' /builds/sylv3rblade/budget_tracker/vendor/ruby/2.5.0/bin/hanami:23:in `<top (required)>' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:74:in `load' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:74:in `kernel_load' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli/exec.rb:28:in `run' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:424:in `exec' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor.rb:387:in `dispatch' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:27:in `dispatch' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/vendor/thor/lib/thor/base.rb:466:in `start' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/cli.rb:18:in `start' /usr/local/lib/ruby/gems/2.5.0/gems/bundler-1.16.2/exe/bundle:30:in `block in <top (required)>' /usr/local/lib/ruby/site_ruby/2.5.0/bundler/friendly_errors.rb:124:in `with_friendly_errors' /usr/local/lib/ruby/gems/2.5.0/gems/bundler-1.16.2/exe/bundle:22:in `<top (required)>' /usr/local/bundle/bin/bundle:23:in `load' /usr/local/bundle/bin/bundle:23:in `<main>' ERROR: Job failed: exit code 1
So I looked up some of the discussions on the issue tracker on Hanami’s github and I found this still open issue with Hanami still requiring a local postgres instance :|. Anyway, cart before the horse, I ended up using the postgres service while manually installing postgres in the ruby image just so I could run my specs proper.y
Here is my `gitlab-ci.yml` now
image: ruby:2.5
services:
- postgres:latest
variables:
DATABASE_URL: 'postgresql://postgres:postgres@postgres/budget_tracker_test'
HANAMI_ENV: test
cache:
paths:
- vendor/ruby
before_script:
- apt-get update -qq && apt-get install -y -qq postgresql postgresql-contrib libpq-dev cmake
- gem install bundler --no-ri --no-rdoc
- bundle install -j $(nproc) --path vendor --quiet
rspec:
script:
- bundle exec hanami db prepare
- bundle exec rspec spec
After pushing this to gitlab, viola!

The first thing on my developer itinerary after getting my MacBook Pro is to install my development tools. That includes upgrading the ruby and rails gem versions packaged with OS X 10.6 and installing Xcode which is included on Snow Leopard’s install DVD. Things proceed smoothly until I tried to install the mysql gem.