Развертывание в линоде через capistrano с помощью git на машине с Windows - PullRequest
1 голос
/ 30 марта 2012

Я пытаюсь развернуть через capistrano и git на машине с Windows без особого успеха. Я сталкиваюсь с 'Ошибка слишком многих аргументов'. У кого-то еще была похожая проблема, и он опубликовал решение в 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.

Есть идеи, что я делаю не так?

1 Ответ

2 голосов
/ 23 июля 2012

Ну, я в том же случае.

Я обнаружил, что мои 64-разрядные версии Windows 7 распознаются как 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

Надеюсь, это поможет !!

Скажите, работает ли он у вас?

И ... если это не так, вы можете проверить отображение вашего 'RUBY_PLATFORM', добавив строку перед условием, например

logger.trace RUBY_PLATFORM
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...