Что может вызвать изменение рабочего каталога (если не вызывается `Dir.chdir`)? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть скрипт, который использует Dir.getwd для получения текущего рабочего каталога несколько раз.Тогда это делает вещи с этим.Это работает для 99,9% пользователей все время, но для некоторых пользователей возвращает неожиданное значение в некоторых случаях.Это вызывает исключение.

Что может вызвать изменение рабочего каталога?

(Dir.chdir в этом коде вообще не вызывается.)


Предыстория:

Я участвую в командной строке мобильной автоматизации с открытым исходным кодоминструмент fastlane , который написан на ruby.

У нас проблема в том, что небольшое количество пользователей сообщают о no implicit conversion of nil into String (TypeError) ошибках, выдаваемых на File.join, где один параметр предоставляется методом self.pathв том же файле .

self.path пытается найти путь к некоторым из наших конфигураций, используя File.directory? и File.exist?.Обычно первая строка value ||= "./#{FOLDER_NAME}/" if File.directory?("./#{FOLDER_NAME}/") в методе должна «сработать» и установить значение.Это то, как он работает для 99,9% наших пользователей.

Для остальных немногих использование этого метода работает сначала 1 или 2 раза, затем он становится ненадежным и возвращает неожиданные значения или вообще ничего - каку метода нет запасного варианта, он может вернуть nil, если не выполнено ни одно из 6 условий.Но: Эти условия проверяют файлы, которые не были затронуты, и при первом вызове одно из этих условий было определенно выполнено (как и должно быть)!

(К сожалению, я вообще не могу воспроизвести проблему на моеммашины.)

Через puts отладку через ветку и обсуждение в выпуске GitHub (ветка здесь ) мы можем связать его с рабочим каталогомменяется неожиданным образом - несколько раз.Он идет от project_directory, где выполняется сценарий, до project_directory/fastlane, где находится конфигурация, или наоборот.

Это само по себе было бы хорошо, так как метод сделан именно для этих двухслучаев.Но значение, похоже, меняется от строки к строке кода!(Вот комментарий к проблеме GitHub , который показывает, как Dir.getwd неожиданно возвращает другие значения). Из-за этого ни одно из условий не может быть выполнено, и мы получаем nil.

Любая идеячто может быть причиной этого?

...