Travis-CI上的Rails数据库设置

我正在尝试在Rails项目上使用Travis Continuous Integration。 文档说必须为SQLite3配置测试数据库如下:

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

但我想保留本地测试的默认配置。 是否可以保留我的本地设置和Travis要求?

我对此问题的解决方案完全基于博客文章 ,但有一些差异:

  1. Travis CI在config/database.travis.yml具体设置;
  2. cp config/database.travis.yml config/database.yml.travis.yml脚本部分之前;
  3. 我在源代码树中没有config/database.yml

以下是两个文件的完整列表:

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

@mrm的博客文章没有说回答你的问题。 我遇到了同样的问题,我的本地机器上的postgreql凭据与travis默认值不同。 这是我提出的最简单的解决方案:

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

请注意,Travis CI会自动设置TRAVIS环境变量。 你的解决方案是:

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

我刚写了一篇博文,描述了如何做到这一点。