2012-03-29 70 views
1

我想部署通过capistrano和git在Windows机器上没有太大的成功。我遇到了'太多的参数错误'。其他人也有类似的问题,并发布solution in 2010,但此修复程序不适合我。它设置为通过“set:deploy_via,:copy”从本地机器进行部署。部署到通过在Windows机器上使用git的capistrano linode

下面是详细的错误信息:

$ cap staging deploy 
    triggering load callbacks 
* executing `staging' 
    triggering start callbacks for `deploy' 
* executing `multistage:ensure' 
* executing `uploads:register_dirs' 
* executing `deploy' 
* executing `deploy:update' 
** transaction: start 
* executing `deploy:update_code' 
    executing locally: "git ls-remote [email protected]:username/_app.git deve lopment" 
    command finished in 2408ms 
* getting (via checkout) revision 121e566c349a1406cba1936abeda49109de7fd78 to C:/Users/myname/AppData/Local/Temp/20120329203009 
    executing locally: git clone [email protected]:user/_app.git C:/Users/ username/AppData/Local/Temp/20120329203009 && cd C:/Users/username/AppData/Local/Temp/ 20120329203009 && git checkout -b deploy 121e566c349a1406cba1936abeda49109de7fd7 
    8 Too many arguments. 

任何想法,我做错了什么?

+0

的条件之前加入一行是什么版本Capistrano的是您使用的,它看起来像' set:deploy_via,:copy'被破坏 - &&被视为命令的参数而不是bash控制运算符 – mpapis 2012-03-31 18:02:59

+0

没有太大的帮助,但我也有同样的问题。一切工作正常,直到它试图用连锁命令克隆/ cd/checkout。我也试过修复,但无济于事。 Windows 7/GitBash 1.7/Cap 2.12。 – rbaker86 2012-04-22 13:06:23

+0

@mpapis即时通讯使用2.11.2 – stackuser 2012-05-03 05:13:54

回答

2

那么,我是在同一个案例。

我发现我的Windows 7 64位被识别为与计划情况不同的RUBY_PLATFORM。我的是'i386-mingw32'RUBY_PLATFORM。

如果你读了“base.rb”周围53行,还有就是条件

if 'RUBY_PLATFORM =~ /win32/' 

所以,在我的情况下,没有成功。我改变这样的线:

if 'RUBY_PLATFORM =~ /win32/' || RUBY_PLATFORM =~ /i386-mingw32/ 

这很好。

我保留了Railsblogger编写的代码。 (与显示执行时间更新)

所以,现在,它就像是:

 # A wrapper for Kernel#system that logs the command being executed. 
     def system(*args) 
     cmd = args.join(' ') 
     result = nil 
     if RUBY_PLATFORM =~ /win32/ || RUBY_PLATFORM =~ /i386-mingw32/ 
      cmd = cmd.split(/\s+/).collect {|w| w.match(/^[\w+]+:\/\//) ? w : w.gsub('/', '\\') }.join(' ') # Split command by spaces, change/by \\ unless element is a some+thing:// 

      # code from http://lifeisrails.wordpress.com/2010/03/25/capistrano-deploy_via-copy-from-gitwindows/ 
      if cmd =~ /\s&&\s/ && cmd =~ /^git\s+clone/ 
      cmd1, cmd = cmd.split(" && ", 2) 
      logger.trace "executing locally: #{cmd1}" 
      elapsed = Benchmark.realtime do 
       result = super(cmd1) 
      end 
      logger.trace "command finished in #{(elapsed * 1000).round}ms" 
      result 
      end 

      cmd.gsub!(/^cd /,'cd /D ') # Replace cd with cd /D 
      cmd.gsub!(/&& cd /,'&& cd /D ') # Replace cd with cd /D 
      logger.trace "executing locally: #{cmd}" 
      elapsed = Benchmark.realtime do 
      result = super(cmd) 
      end 
     else 
      logger.trace "executing locally: #{cmd}" 
      elapsed = Benchmark.realtime do 
      result = super 
      end 
     end 

希望这将有助于!

请告诉我,如果它适合你?

而且......如果不是OK,你可以测试,以显示你的“RUBY_PLATFORM”,通过像

logger.trace RUBY_PLATFORM