Travis-CI上的Rails数据库设置
问题描述:
我想在Rails项目上使用Travis持续集成。该文件说,该测试数据库必须配置如下的SQLite3的:Travis-CI上的Rails数据库设置
test:
adapter: sqlite3
database: ":memory:"
timeout: 500
但我想继续我的默认配置本地测试。是否有可能保持我的本地设置和Travis要求?
答
我对这个问题的解决方案完全基于a blog post有一些不同:
- 特拉维斯CI特定设置在
config/database.travis.yml
; -
cp config/database.travis.yml config/database.yml
在.travis.yml
之前的脚本部分; - 源代码树中没有
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' %>
需要注意的是特拉维斯CI自动设置TRAVIS环境变量。 您的解决方案将是:
# config/database.yml
test:
adapter: sqlite3
database: <%= ENV['TRAVIS'] ? '":memory:"' : 'db/test.sqlite3' %>
timeout: 500
我不明白你的问题。无论如何,你的本地测试不会使用.travis.yml,他们会吗? – markus 2012-02-17 07:36:12
Markus,根据Travis文档,我必须编辑我的config/database.yml并替换我的本地测试数据库中的内存数据库:[SQLite设置](http://about.travis-ci.org/docs/user/数据库的建立/#sqlite3的)。 – luizbranco 2012-02-17 12:58:41