Временный файл в Ruby удален перед сборкой мусора - PullRequest
2 голосов
/ 03 августа 2020

У меня есть код вроде:

      json_file = Tempfile.new("json_cred_")
      json_file.write(auth_json)
      json_file.close
      return GCE.new(:json_cred => json_file.path, :auth_type => "json",
                     :avoid_garbage_collection => json_file)

Внутри GCE методов класса есть код вроде:

        if !File.exist?(config[:json_cred])
          logger.error "Tempfile deleted: #{config[:avoid_garbage_collection]&.inspect}"
          raise
        end

Позже во время выполнения примерно в 40% случаев вышеперечисленное не удается. И зарегистрированная ошибка является ожидаемой:

[17:10:44] ERROR> Tempfile deleted: #<Tempfile:/home/jenkins/workspace/Runner-v3/workdir/json_cred_20200801-375-hqhu72 (closed)>

Есть идеи, как это возможно, что временный файл пропадает? Я не вижу другого выхода, кроме как удалить его каким-то внешним процессом. Но также я не вижу такого внешнего процесса, поскольку это система CI на основе контейнера, и внутри нее выполняется только процесс тестирования. Поэтому я спрашиваю, может ли быть какое-нибудь другое объяснение, которое мне не хватает.

Это с ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux].

...