Configuración de la base de datos Rails en Travis-Ci
-
26-10-2019 - |
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?
Solución
Mi solución para este problema se basa completamente en una publicación de blog Con algunas diferencias:
- Travis CI Configuración específica en
config/database.travis.yml
; cp config/database.travis.yml config/database.yml
en la sección de script antes de.travis.yml
;- 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.