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

У меня есть скрипт, который использует 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,

Есть идеи, что может быть причиной этого?

0 ответов

Другие вопросы по тегам