Ruby RubyGem 如何正确配置 Travis CI

helperhaps · 2016年04月14日 · 最后由 helperhaps 回复于 2016年04月15日 · 2140 次阅读

我写了一个 rubygem,其中的测试流程是

$ cp test/config.yml.example test/config.yml
$ vi test.config.yml
# 手动填写必要的隐私数据(帐号密码啥的等基础数据, 测试要用到)
$ bundle exec test

现在是 push 到 github 上,那个 Travis Ci build 失败,其原因也好理解,因为没有填写必要的数据,所以,请大家出出主意,该如何进行处理

app: <%= ENV['app'] %>
password: <%= ENV['password'] %>
tags:
  common: <%= ENV['tags_common'] %>
delay_time: <%= ENV['delay_time'] %>

当前我的想法是,Travis Ci 可以设置环境变量,那么修改测试,让其从环境变量中读取基础数据 但是毕竟不是 rails 😭 无法解析 yaml 里面的 erb

#1 楼 @lolychee 哈,我知道 rails 为啥能在 yml 里面写 erb,但是感觉这种方式不太好,饶了太多弯,有没有更加简便一点的处理方法

你需要用 ERB.new 执行一下:

require 'redis'
require 'redis-namespace'

erb_result = ERB.new(File.read("#{Rails.root}/config/redis.yml")).result
redis_config = YAML.load(erb_result)[Rails.env]

Redis.current = Redis.new(url: redis_config['url'])

config/redis.yml

test:
  url: redis://<%= ENV['REDIS_HOST'] || 'localhost' %>:6379/3

#3 楼 @huacnlee 感谢贴出的代码,是的按照这个思路(可以说是 rails 的思路哈,就是用 ERB 处理一次,再给 YAML 处理)是可以解决这个问题的,而且我本地也通过测试了,但是总觉的绕的弯有点多了,其实我的另一个思路是,直接用 config.rb 来配置,在里面可以直接使用 ruby 脚本调到环境变量,然后在测试的脚本中读取 config.rb 如此一来,应该会更加简洁一点

可以试试我司的 flow.ci, 支持 ruby 可以直接填写自定义脚本 现在内测中

#5 楼 @jicheng1014 看看官网应该是个好东西哈,不过我只是在写一个 rubygem,而且我不太喜欢在这个上面引入太多其他东西

需要 登录 后方可回复, 如果你还没有账号请 注册新账号