2016-08-10 3 views
0

Я пытаюсь сделать резервное восстановление gitlab, и это вроде работает, но в командной строке всегда говорится, что восстановление репозиториев не удалось. Я думаю, что я нашел условный оператор в коде, который отвечает за оператор [failed]. Кто-нибудь подсказывает, что это делает или знает направление, в котором я должен пойти, чтобы найти свою ошибку?Что означает этот код Ruby?

if Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1") 
puts "[DONE]".green                                        
      else                                             
      puts "[FAILED]".red                                        
      end 

ответ

1

Kernel.system вызывает данную команду оболочки. Когда он терпит неудачу, он возвращает значение false.

В вашем случае это означает, что git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1 не работает.

Вы можете проверить, почему это не удается при выполнении этой команды в командной строке вручную без > /dev/null 2>&1.

Чтобы получить команду, которую вы можете в отладочной печати перед командой

if Kernel.system(pp("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1"))

+0

Если я проверяю с/dev/null 2> & 1. Я получаю вывод: -bash:/dev/null: Permission denied Я попытался изменить chmod и chown dev/null и repo. Но я все еще получаю отказ от сообщения. Что я делаю не так? –

+0

Является ли ваш хозяин голой металлической машиной или каким-то vm или контейнером? Похоже, у вашего пользователя нет права на запись в/dev/null. Какую ОС вы используете? – slowjack2k

+0

Я использую vm (оболочка в ящике) –

1

Из docs:

система возвращает true, если команда дает нулевое состояние выхода, false для не нулевой статус выхода. Возвращает nil, если выполнение команды завершается с ошибкой. Состояние ошибки доступно в $?.

Это говорит: Падение в постоянно неисправном состоянии означает, что командная система возвращается false или nil. Вы можете проверить $? по причине:

command = Kernel.system("git clone --bare #{path_to_bundle} #{project.repository.path_to_repo} > /dev/null 2>&1") 
if command 
    puts "[DONE]".green 
else 
    puts "[FAILED]".red 
    puts "Reason:" 
    puts $? 
end 
+0

Если я это сделаю, я получаю вывод: pid 7169 (каждый pid имеет разное количество) exit 128 (все выходы имеют одинаковый номер) –

+0

Когда вы получите код ошибки 128 [этот вопрос и ответы] (https: // stackoverflow .com/questions/9617336/how-to-solve-git-did-not-exit-clean-exit-code-128-error-on-tortoisegit) может представлять для вас интерес. – spickermann

Смежные вопросы