Travis-CI上的Rails数据库设置

时间:2012-02-17 00:15:23

标签: ruby-on-rails travis-ci

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

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

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

3 个答案:

答案 0 :(得分:54)

我对此问题的解决方案完全基于a blog post,但存在一些差异:

  1. config/database.travis.yml;
  2. 中的Travis CI特定设置
  3. cp config/database.travis.yml config/database.yml位于.travis.yml;
  4. 的脚本部分之前
  5. 我在源代码树中没有config/database.yml
  6. 以下是两个文件的完整列表:

    # .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 :(得分:5)

@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

答案 2 :(得分:1)

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