Travis-CI上的Rails数据库设置

问题描述:

我想在Rails项目上使用Travis持续集成。该文件说,该测试数据库必须配置如下的SQLite3的:Travis-CI上的Rails数据库设置

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

但我想继续我的默认配置本地测试。是否有可能保持我的本地设置和Travis要求?

+0

我不明白你的问题。无论如何,你的本地测试不会使用.travis.yml,他们会吗? – markus 2012-02-17 07:36:12

+0

Markus,根据Travis文档,我必须编辑我的config/database.yml并替换我的本地测试数据库中的内存数据库:[SQLite设置](http://about.travis-ci.org/docs/user/数据库的建立/#sqlite3的)。 – luizbranco 2012-02-17 12:58:41

我对这个问题的解决方案完全基于a blog post有一些不同:

  1. 特拉维斯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 
+1

不需要在脚本之前复制database.yml。在任何情况下,您的生产凭证都不应该在公共github中,但使用诸如production:password:之类的东西可以工作(它只会被travis忽略) – mrm 2013-02-26 05:36:58

+1

是的,生产凭证虽然环境变量并不总是好主意。因此,将config/database.yml文件保存在存储库中是一种常见的做法。 – wik 2013-02-26 23:12:29

+0

@wik为什么不呢?这是我第一次听到这个。 – jottr 2014-10-21 19:43:08

我刚刚写了a blog post描述了如何做到这一点。

+0

你的确可以对几个数据库进行测试,但它在任何地方都使用相同的database.yml文件,即在本地和生产环境中,除非你部署到heroku;否则 – wik 2012-12-08 07:37:17

+0

如果你担心凭证, database.yml'通过ERB--所以你可以引用一个安全的证书哈希来保证你的密码不受git影响。 (我们这样做@twitter)。 – mrm 2013-08-26 05:14:04

+0

我想我们已经在上面的答案中讨论过了,不是吗? ;) – wik 2013-08-27 20:08:29

@ 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' %> 

需要注意的是特拉维斯CI自动设置TRAVIS环境变量。 您的解决方案将是:

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