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!