【问题标题】:Deploying to linode via capistrano using git on a windows machine在 Windows 机器上使用 git 通过 capistrano 部署到 linode
【发布时间】:2012-03-29 21:55:11
【问题描述】:

我正在尝试通过 capistrano 和 git 在 Windows 机器上进行部署,但没有取得多大成功。我遇到了“参数过多错误”。其他人遇到了类似的问题并发布了solution in 2010,但此修复对我不起作用。它设置为通过“set :deploy_via, :copy”从本地机器部署。

这里是详细的错误信息:

$ 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 git@github.com: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 git@github.com: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.

知道我做错了什么吗?

【问题讨论】:

  • 您使用的是哪个版本的 capistrano,看起来 set :deploy_via, :copy 已损坏 - && 被视为命令参数而不是 bash 控制运算符
  • 帮助不大,但我也有同样的问题。一切正常,直到它尝试使用链式命令克隆/cd/checkout。我也尝试了修复但无济于事。 Windows 7 / GitBash 1.7 / Cap 2.12。

标签: git windows-7 capistrano


【解决方案1】:

嗯,我也是这样。

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

如果您在第 53 行附近阅读“base.rb”,则存在条件

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

希望对你有帮助!!

告诉我它是否适合你?

而且...如果不正常,您可以通过在条件前添加一行来测试显示您的“RUBY_PLATFORM”,例如

logger.trace RUBY_PLATFORM

【讨论】:

    猜你喜欢
    • 2012-01-13
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    相关资源
    最近更新 更多