Mina: Нужна помощь: оболочка Windows mingw32 (git bash) — CRLF

Созданный на 10 янв. 2013  ·  12Комментарии  ·  Источник: mina-deploy/mina

Перво-наперво - спасибо за отличный инструмент :+1:

Сейчас я использую Windows (да...) и пытаюсь выполнить развертывание с помощью Mina.

Я обнаружил, что сгенерированный сценарий bash в Windows Git Bash (стандартная оболочка mingw32) имеет окончания строк CRLF, но Linux использует LF, поэтому возникают такие ошибки, как «Неожиданный EOF».

Я записываю этот сгенерированный скрипт в файл, конвертирую окончания строк в LF и использую его вручную - все работает нормально.

Это функция Mina, ошибка mingw32 или неправильная конфигурация? :)

enhancement

Самый полезный комментарий

Теперь я знаю, почему.
Метод Shellwords.escape для Ruby не поддерживает среду Windows.
Итак, чтобы это исправить, я добавил немного кода в lib/mina.rb.
Оно работает!

Я новичок, так что.... но в любом случае, это работает.

# lib/mina.rb
module Mina
  #if windows os
  require 'rbconfig'
  is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) 
  if is_windows
    module Shellwords
      def shellescape(str)
          '"' + str.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"'
      end

      module_function :shellescape
      class << self
        alias escape shellescape
      end
    end
  end
...

Все 12 Комментарий

Хм. Вы пытаетесь выполнить развертывание на сервере Windows или работаете на рабочей станции Windows?

Спасибо за предупреждение — к сожалению, сейчас у нас нет компьютера с Windows для тестирования, но я полагаю, что мы можем поработать над некоторыми гипотетическими исправлениями.

У меня такая же проблема. На Win7x64 попытка развернуть на CentOS

 bash: -c line 106: unexpected EOF while looking for a matching `"'

У одного из моих коллег также возникла эта проблема при развертывании на сервере Ubuntu. Он на Vista (без комментариев) с Git Bash (mingw32), а мы используем Mina 0.3.0.

Я получил ту же ошибку, что и @rezen в Windows 8.1 x64, пытаясь развернуть Ubuntu LTS 12.04.3 x64.

@reterius у меня такая же ошибка в windows.
Как записать этот сгенерированный скрипт в файл, преобразовать окончания строк в LF и использовать его вручную?

Теперь я знаю, почему.
Метод Shellwords.escape для Ruby не поддерживает среду Windows.
Итак, чтобы это исправить, я добавил немного кода в lib/mina.rb.
Оно работает!

Я новичок, так что.... но в любом случае, это работает.

# lib/mina.rb
module Mina
  #if windows os
  require 'rbconfig'
  is_windows = (RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/) 
  if is_windows
    module Shellwords
      def shellescape(str)
          '"' + str.gsub(/\\(?=\\*\")/, "\\\\\\").gsub(/\"/, "\\\"").gsub(/\\$/, "\\\\\\").gsub("%", "%%") + '"'
      end

      module_function :shellescape
      class << self
        alias escape shellescape
      end
    end
  end
...

работает отлично !! не новичок....эксперт

Этот твик попал в кодовую базу?

Поможет ли решить эту проблему, если я добавлю исправление @insub в запрос на вытягивание?

@coredevelopers : есть ли причина, по которой это не поднимается? Решение insub работает. Почему бы не сделать небольшие исправления для поддержки сообщества Windows?

Это действительно работает. Спасибо!

Может ли кто-нибудь протестировать мастер github, если это работает?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги