家里没有Linux,又很想跑下CC.rb,
最近一个项目需要了解下持续集成,所以在家里下载了最新的CC.rb装起来,并且cruise add了两个项目,
问题是,把CC跑起来后,首页看不到我加的那两个项目,而在
C:\Documents and Settings\Administrator\.cruise\projects
这里的确存在!
看了下CC的逻辑,找到Projects模型的几个关于加载的方法,
打开Console开始调试,
我一开始怀疑@dir路径的值不对,
于是这样:
没问题啊,是这个路径。
再想想,是不是@list是空的啊,
结果一试的确是空的,nnd。
跟着load_all里面的代码继续尝试,发现这里有问题:
Dir["#{@dir}/*"]
Windows和Linux路径分隔符不统一导致,CC又没有人为避免,结果就把我郁闷了一下:(
郁闷啊,今晚不搞了,明天还是回到linux上搞搞吧。
不爽,
实在很想马上试试CC,得把它搞定!
继续调试,上面写在load_all中的代码可以手动的改掉,但CRUISE_DATA_ROOT这个变量的值要改成windows的分隔符有点麻烦,要找到CRUISE_DATA_ROOT在什么地方。
在boot.rb找到了CRUISE_DATA_ROOT的最初定义,
看到File.join这玩意,以前没好好主意,马上试了下,发现即便在windows平台,它也是默认'/'为路径分隔符的,太讨厌。
改掉它!
重启,看到了CC首页上我建的两个项目,搞定!
改这里更好些:
最近一个项目需要了解下持续集成,所以在家里下载了最新的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