CruiseControl.rb的又一个Bug

我遇到的问题如下:

执行:
./cruise build test_cc_01
的时候,会出现以下错误?字面上看是连接SVN没权限,但我试过好多SVN,而且之前我已经通过./cruise add方法将SVN的代码拉下来过了,难道它不记得密码?
即便它不记得密码,我也试过./cruise build test_cc_01 --username zheng.cuizh --password PPPPPPP
也不行,
我还试过在test_cc_01项目的配置文件cruise_config.rb中,加入如下代码:

project.source_control.username = 'zheng.cuizh'
project.source_control.password = 'PPPPPPP'

还是不行!

执行时候所有的代码和错误提示如下:

hostname@ubuntu:~/ruby/cruisecontrolrb-1.3.0$ ./cruise build test_cc_01  
cruise data root = '/home/hostname/.cruise'
Builder for project 'test_cc_01' started
Logging to: /home/hostname/ruby/cruisecontrolrb-1.3.0/log/test_cc_01_builder.log
Build loop failed
BuilderError: svn: OPTIONS of 'https://roadrunner.googlecode.com/svn/trunk': authorization failed (https://roadrunner.googlecode.com)
./script/../config/../lib/subversion.rb:161:in `execute_with_error_log'
./script/../config/../lib/command_line.rb:86:in `call'
./script/../config/../lib/command_line.rb:86:in `e'
./script/../config/../lib/command_line.rb:84:in `popen'
./script/../config/../lib/command_line.rb:84:in `e'
./script/../config/../lib/command_line.rb:71:in `execute'
./script/../config/../lib/command_line.rb:70:in `chdir'
./script/../config/../lib/command_line.rb:70:in `execute'
./script/../config/../lib/subversion.rb:152:in `execute_with_error_log'
./script/../config/../lib/subversion.rb:141:in `execute_in_local_copy'
./script/../config/../lib/subversion.rb:140:in `chdir'
./script/../config/../lib/subversion.rb:140:in `execute_in_local_copy'
./script/../config/../lib/subversion.rb:127:in `svn'
./script/../config/../lib/subversion.rb:112:in `log'
./script/../config/../lib/subversion.rb:62:in `latest_revision'
./script/../config/../app/models/project.rb:210:in `build_if_necessary'
./script/../config/../app/models/polling_scheduler.rb:13:in `run'
./script/builder:79
./script/builder:78:in `catch'
./script/builder:78
./cruise:14:in `load'
./cruise:14:in `builder'
./cruise:68:in `send'
./cruise:68
/usr/lib/ruby/1.8/fileutils.rb:121:in `chdir'
/usr/lib/ruby/1.8/fileutils.rb:121:in `cd'
./cruise:67
[error] svn: OPTIONS of 'https://roadrunner.googlecode.com/svn/trunk': authorization failed (https://roadrunner.googlecode.com)


我尝试跟踪到负责读写配置文件的CC的那块代码,

发现CC加载一个项目的配置文件是在这个方法里面完成的:

  def write_config_example(project)
config_example = File.join(RAILS_ROOT, 'config', 'cruise_config.rb.example')
config_in_subversion = File.join(project.path, 'work', 'cruise_config.rb')
cruise_config = File.join(project.path, 'cruise_config.rb')
if File.exists?(config_example) and not File.exists?(config_in_subversion)
FileUtils.cp(config_example, cruise_config)
end
end

我怀疑config_in_subversion 这个文件中的用户名和密码没有起作用。

全文搜索username和password,在./lib/subversioni.rb文件中找到两处代码:

  def checkout(revision = nil, stdout = $stdout)
@url or raise 'URL not specified'

options = [@url, path]
# =>zheng.cuizh:add a patch start
# options << "--username" << @username if @username
# options << "--password" << @password if @password
# =>zheng.cuizh:add end
options << "--revision" << revision_number(revision) if revision

# need to read from command output, because otherwise tests break
svn('co', options) do |io|
begin
while line = io.gets
stdout.puts line
end
rescue EOFError
end
end
end


  def svn(operation, arguments, options = {}, &block)
command = ["svn"]
command << "--non-interactive" unless @interactive
command << operation
command += arguments.compact

# => zheng.cuizh:add a patch start:
command += ['--username', @username, '--password', @password] if @username and @password
# => zheng.cuizh:add end.
command

execute_in_local_copy(command, options, &block)
end


这个RB文件中,好好读一下可以发现svn是执行svn命令的方法,我之前报错就说svn在checkout的时候没有权限,很可能是执行svn("checkout",options...)这个类似的代码时,没有把用户名和密码传过去。

在网上搜索了一下这段代码,居然找到了一个哥们和我遇到同样的问题,他的文章如下:
[url]http://www.practicalguile.com/2008/02/02/using-cruisecontrolrb-with-repositories-without-anonymous-access/
[/url]
他的解决方案如下:


     options = [@url, target_directory]
- options << "--username" << @username if @username
- options << "--password" << @password if @password
options << "--revision" << revision_number(revision) if revision



     command << "--non-interactive" unless @interactive
command << operation
command += options.compact.flatten
+ command += ['--username', @username, '--password', @password] if @username and @password
command



搞定!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值