Что может вызвать изменение рабочего каталога (если не вызывается `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
,
Есть идеи, что может быть причиной этого?