这是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

你可能感兴趣的:(c,linux,windows,ubuntu,Ruby)