23

我正在尝试在 Rails 项目中使用 Travis 持续集成。文档说测试数据库必须为 SQLite3 配置如下:

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

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

4

3 回答 3

55

我对这个问题的解决方案完全基于一篇博客文章,但有一些不同之处:

  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
于 2012-12-08T09:02:16.420 回答
6

@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
于 2013-12-17T05:50:04.803 回答
0

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

于 2012-04-09T03:44:09.067 回答