Rails configuration de base de données sur Travis-CI
-
26-10-2019 - |
Question
Je suis en train d'utiliser Travis Intégration continue sur un projet Rails. La documentation indique que le test db doit être configuré comme suit pour SQLite3:
test:
adapter: sqlite3
database: ":memory:"
timeout: 500
Mais je voudrais garder ma configuration par défaut pour les tests locaux. Est-il possible de garder mes deux paramètres locaux et les exigences Travis?
La solution
Ma solution à ce problème est entièrement basé sur un billet de blog avec quelques différences:
- Paramètres spécifiques Travis CI dans
config/database.travis.yml
; -
cp config/database.travis.yml config/database.yml
avant la section de script de.travis.yml
; - Je n'ai pas
config/database.yml
dans l'arbre source.
Voici la liste complète pour les fichiers:
# .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
Autres conseils
@ ne mrm dit rien au sujet de répondre à votre question. Je fait face au même problème où mes lettres de créance postgreql sont différentes sur ma machine locale que travis par défaut. C'est la solution la plus simple, je suis venu avec:
# config/database.yml
test:
adapter: postgresql
database: medscraper_test
username: <%= ENV['TRAVIS'] ? 'postgres' : 'MY_TEST_USERNAME' %>
password: <%= ENV['TRAVIS'] ? '' : 'MY_TEST_PASSWORD' %>
Notez que Travis CI définit automatiquement la variable d'environnement TRAVIS. Votre solution serait:
# config/database.yml
test:
adapter: sqlite3
database: <%= ENV['TRAVIS'] ? '":memory:"' : 'db/test.sqlite3' %>
timeout: 500
Je viens d'écrire un blog décrivant comment faire.