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?

È stato utile?

Soluzione

La mia soluzione per questo problema è completamente basata su un blog post con alcune differenze:

  1. impostazioni specifiche Travis CI in config/database.travis.yml;
  2. cp config/database.travis.yml config/database.yml nella prima sezione dello script di .travis.yml;
  3. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top