Rotaie di installazione del database su Travis-CI
-
26-10-2019 - |
Domanda
Sto cercando di utilizzare Travis Continuous Integration su un progetto Rails. La documentazione dice che il db di prova deve essere configurato come segue per SQLite3:
test:
adapter: sqlite3
database: ":memory:"
timeout: 500
Ma mi piacerebbe mantenere la mia configurazione di default per i test locali. E 'possibile mantenere entrambe le mie impostazioni locali e le esigenze di Travis?
Soluzione
La mia soluzione per questo problema è completamente basata su un blog post con alcune differenze:
- impostazioni specifiche Travis CI in
config/database.travis.yml
; -
cp config/database.travis.yml config/database.yml
nella prima sezione dello script di.travis.yml
; - Non ho
config/database.yml
nella struttura di origine.
Ecco lista completa per entrambi i file:
# .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
Altri suggerimenti
@ di MRM post non dice nulla circa la risposta alla tua domanda. Ho affrontato lo stesso problema in cui le mie credenziali postgreql sono diversi sulla mia macchina locale di Travis predefinita. Questa è la soluzione più semplice mi si avvicinò con:
# config/database.yml
test:
adapter: postgresql
database: medscraper_test
username: <%= ENV['TRAVIS'] ? 'postgres' : 'MY_TEST_USERNAME' %>
password: <%= ENV['TRAVIS'] ? '' : 'MY_TEST_PASSWORD' %>
Si noti che Travis CI imposta automaticamente variabile d'ambiente TRAVIS. La soluzione potrebbe essere:
# config/database.yml
test:
adapter: sqlite3
database: <%= ENV['TRAVIS'] ? '":memory:"' : 'db/test.sqlite3' %>
timeout: 500
Ho appena scritto un post sul blog che descrive come fare questo.