这是CruiseControl.rb的Bug吧

家里没有Linux,又很想跑下CC.rb,
最近一个项目需要了解下持续集成,所以在家里下载了最新的CC.rb装起来,并且cruise add了两个项目,

问题是,把CC跑起来后,首页看不到我加的那两个项目,而在

C:\Documents and Settings\Administrator\.cruise\projects

这里的确存在!

看了下CC的逻辑,找到Projects模型的几个关于加载的方法,

  def initialize(dir = CRUISE_DATA_ROOT + "/projects")
@dir = dir
@list = []
end

def load_all
@list = Dir["#{@dir}/*"].find_all {|child| File.directory?(child)}.sort.
collect {|child| Projects.load_project(child)}
self
end


打开Console开始调试,
我一开始怀疑@dir路径的值不对,
于是这样:

>> Projects.new.instance_eval{@dir}
=> "C:\\Documents and Settings\\Administrator/.cruise/projects"

没问题啊,是这个路径。

再想想,是不是@list是空的啊,
结果一试的确是空的,nnd。

跟着load_all里面的代码继续尝试,发现这里有问题:
Dir["#{@dir}/*"]

>> Dir["C:/Documents and Settings/Administrator/.cruise/projects/*"]
=> ["C:/Documents and Settings/Administrator/.cruise/projects/test_cc", "C:/Docu
ments and Settings/Administrator/.cruise/projects/testcc2"]
>> Dir["C:\\Documents and Settings\\Administrator/.cruise/projects/*"]
=> []


Windows和Linux路径分隔符不统一导致,CC又没有人为避免,结果就把我郁闷了一下:(

郁闷啊,今晚不搞了,明天还是回到linux上搞搞吧。

不爽,
实在很想马上试试CC,得把它搞定!

继续调试,上面写在load_all中的代码可以手动的改掉,但CRUISE_DATA_ROOT这个变量的值要改成windows的分隔符有点麻烦,要找到CRUISE_DATA_ROOT在什么地方。

在boot.rb找到了CRUISE_DATA_ROOT的最初定义,
unless defined? CRUISE_DATA_ROOT
if ENV['CRUISE_DATA_ROOT']
CRUISE_DATA_ROOT = ENV['CRUISE_DATA_ROOT']
else
CRUISE_DATA_ROOT = File.join(find_home, ".cruise")
end
puts "cruise data root = '#{CRUISE_DATA_ROOT}'"
end

看到File.join这玩意,以前没好好主意,马上试了下,发现即便在windows平台,它也是默认'/'为路径分隔符的,太讨厌。

改掉它!

unless defined? CRUISE_DATA_ROOT
if ENV['CRUISE_DATA_ROOT']
CRUISE_DATA_ROOT = ENV['CRUISE_DATA_ROOT']
else
#CRUISE_DATA_ROOT = File.join(find_home, ".cruise")
CRUISE_DATA_ROOT = File.join(find_home, ".cruise").gsub('\\','/')
end
puts "cruise data root = '#{CRUISE_DATA_ROOT}'"
end


重启,看到了CC首页上我建的两个项目,搞定!

改这里更好些:

  ['HOME', 'USERPROFILE'].each do |homekey|
#return ENV[homekey] if ENV[homekey]
return ENV[homekey].gsub('\\','/') if ENV[homekey]
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值