Настройка базы данных Rails на Travis-CI - PullRequest
21 голосов
/ 17 февраля 2012

Я пытаюсь использовать Travis Continuous Integration в проекте Rails. В документации сказано, что тестовая база данных должна быть настроена для SQLite3 следующим образом:

test:
  adapter: sqlite3
  database: ":memory:"
  timeout: 500

Но я бы хотел сохранить конфигурацию по умолчанию для локальных тестов. Можно ли сохранить как мои локальные настройки, так и требования Travis?

Ответы [ 3 ]

54 голосов
/ 08 декабря 2012

Мое решение этой проблемы полностью основано на сообщении в блоге с некоторыми отличиями:

  1. Настройки Travis CI в config/database.travis.yml;
  2. cp config/database.travis.yml config/database.yml в разделе перед сценарием .travis.yml;
  3. У меня нет config/database.yml в дереве исходников.

Вот полный список обоих файлов:

# .travis.yml
language: ruby
rvm:
  - 1.9.3
env:
  - DB=sqlite
  - DB=mysql
  - DB=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.travis.yml config/database.yml
  - mysql -e 'create database strano_test'
  - psql -c 'create database strano_test' -U postgres


# config/database.travis.yml
sqlite: &sqlite
  adapter: sqlite3
  database: db/<%= Rails.env %>.sqlite3

mysql: &mysql
  adapter: mysql2
  username: root
  password:
  database: strano_<%= Rails.env %>

postgresql: &postgresql
  adapter: postgresql
  username: postgres
  password:
  database: strano_<%= Rails.env %>
  min_messages: ERROR

defaults: &defaults
  pool: 5
  timeout: 5000
  host: localhost
  <<: *<%= ENV['DB'] || "postgresql" %>

development:
  <<: *defaults

test:
  <<: *defaults

production:
  <<: *defaults
5 голосов
/ 17 декабря 2013

@ сообщение в блоге mrm ничего не говорит об ответе на ваш вопрос.Я столкнулся с той же проблемой, когда мои учетные данные postgreql отличаются на моей локальной машине от travis по умолчанию.Это самое простое решение, которое я придумал:

# config/database.yml
test:
  adapter: postgresql
  database: medscraper_test
  username: <%= ENV['TRAVIS'] ? 'postgres' : 'MY_TEST_USERNAME' %>
  password: <%= ENV['TRAVIS'] ? '' : 'MY_TEST_PASSWORD' %>

Обратите внимание, что Travis CI автоматически устанавливает переменную среды TRAVIS.Ваше решение будет:

# config/database.yml
test:
  adapter: sqlite3
  database: <%= ENV['TRAVIS'] ? '":memory:"' : 'db/test.sqlite3' %>
  timeout: 500
1 голос
/ 09 апреля 2012

Я только что написал пост в блоге , описывающий, как это сделать.

...