2012-03-29 65 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