У меня есть скрипт, который использует 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
.
Любая идеячто может быть причиной этого?