Pregunta

Estoy tratando de usar la integración continua de Travis en un proyecto de Rails. La documentación dice que la prueba DB debe configurarse como lo siguiente para SQLITE3:

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

Pero me gustaría mantener mi configuración predeterminada para pruebas locales. ¿Es posible mantener mi configuración local y los requisitos de Travis?

¿Fue útil?

Solución

Mi solución para este problema se basa completamente en una publicación de blog Con algunas diferencias:

  1. Travis CI Configuración específica en config/database.travis.yml;
  2. cp config/database.travis.yml config/database.yml en la sección de script antes de .travis.yml;
  3. No tengo config/database.yml en el árbol de la fuente.

Aquí hay listado completo para ambos archivos:

# .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

Otros consejos

La publicación del blog de MRM no dice nada sobre responder a su pregunta. Me enfrenté al mismo problema en el que mis credenciales de Postgreql son diferentes en mi máquina local que el valor predeterminado de Travis. Esta es la solución más simple que se me ocurrió:

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

Tenga en cuenta que Travis CI establece automáticamente la variable de entorno Travis. Tu solución sería:

# config/database.yml
test:
  adapter: sqlite3
  database: <%= ENV['TRAVIS'] ? '":memory:"' : 'db/test.sqlite3' %>
  timeout: 500

Acabo de escribir una publicación de blog describiendo cómo hacer esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top