mehulkar
mehulkar

Reputation: 4974

Setting up travis.ci with Rails and Postgres

I'm having trouble getting Rails, postgres travis to work. Keep getting a database connection error when the tests start running.

Errno::ECONNREFUSED: Connection refused - connect(2)

.travis.yml

language: ruby
rvm:
  - "1.9.3"
before_script:
  - cp config/database.travis.yml config/database.yml
  - psql -c 'create database myapp_test;' -U postgres
  - bundle exec rake db:migrate --trace
  - bundle exec rake db:test:prepare --trace
script:
  - RAILS_ENV=test bundle exec rake spec

gemfile: Gemfile.ci

and database.travis.yml

test:
  adapter: postgresql
  database: myapp_test
  username: postgres

I have to use separate database config.

Any clue what I'm doing wrong? Following the documentation almost exactly in http://about.travis-ci.org/docs/user/database-setup/ except I have to copy database config over to the right place.

Upvotes: 8

Views: 3672

Answers (3)

zhaoqing
zhaoqing

Reputation: 795

Based on the doc, you should turn on the postgresql service first

services:
  - postgresql

And specify the DB type with (optional) :

    env:
      - DB=pgsql

NOTE: postgresql and postgres WILL NOT WORK. Please use pgsql !!!

Here is the full code that worked for me:

.travis.yml

language: ruby

rvm:
  - 2.2

env:
  - DB=pgsql

services:
  - postgresql

script:
  - RAILS_ENV=test bundle exec rake db:migrate --trace
  - bundle exec rake db:test:prepare
  - bundle exec rake

before_script:
  - cp config/database.yml.travis config/database.yml
  - psql -c 'create database courseselect_test;' -U postgres

config/database.yml.travis

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: courseselect_development

test:
  <<: *default
  database: courseselect_test

production:
  <<: *default
  database: courseselect_developement

BTW, I also have the file database.yml with the same content as config/database.yml.travis

Upvotes: 0

mehulkar
mehulkar

Reputation: 4974

The problem was that I needed to enable the elasticsearch service on travis. Adding records to the database requires indexing and the refused connection was to a nonexistent elasticsearch server.

Upvotes: 1

Peter Goldstein
Peter Goldstein

Reputation: 4545

Why are you doing the

bundle exec rake db:migrate
bundle exec rake db:test:prepare

The db:test:prepare is going to try and access the development database, which doesn't exist. And the rake db:migrate should be automatically run by Travis.

Upvotes: 2

Related Questions