Тест Веркера не может открыть временные файлы

В моем коде у меня есть следующий блок

Tempfile.open([model.id.to_s, '.txt'], Rails.root.join('tmp')) do |file|
  begin
    file << somedata_i_have_before
    model.file = file # using paperclip gem attached file
  ensure
    # close and delete file
    file.close
    file.unlink
  end
end

Этот код отлично работает локально и на производстве... проблема в том, что я настроил приложение Wercker для автоматизации тестирования и развертывания, но упомянутый выше блок не работает на Wercker и возвращает следующую ошибку

Errno::ENOENT:
No such file or directory @ rb_sysopen - /pipeline/build/tmp/539e01d4776572049647010020140615-1174-ajp5tf.txt
# ./lib/some_lib.rb:63:in `some_method'

какие-нибудь идеи, как решить это так, чтобы сборка на wercker прошла?

2 ответа

Решение

Я предполагаю, что папка tmp игнорируется (.gitignore) в вашем репозитории, и поэтому она не будет создана при чистом клоне репозитория.

Я могу ошибаться но Tempfile.open([model.id.to_s, '.txt'], Rails.root.join('tmp')) не создает папку tmp, она ожидает, что она уже существует.

У меня были похожие проблемы с игнорируемыми папками - вы можете протестировать его с помощью чистого git-клона, а затем выполнить этот тест, как если бы он работал на сервере CI/CD.

Проблема заключалась в том, что Wercker не создает tmpи, чтобы решить эту проблему, просто добавьте следующий шаг к вашему wercker.yml (до запуска спецификации)

    - script:
        name: create and grant writing permission to /tmp directory
        code: |
            mkdir $WERCKER_ROOT/tmp
            chmod -R 755 $WERCKER_ROOT/tmp
            echo "$(ls -l $WERCKER_ROOT)"

    # A step that executes `rspec` command
    - script:
        name: rspec
        code: bundle exec rspec

и убедитесь, что ls -l $WERCKER_ROOT включить что-то вроде следующего

drwxr-xr-x  2 ubuntu ubuntu 4096 Jun 15 22:39 tmp

Еще один способ решить эту проблему - создать tmp/.gitkeep и передайте его в репозиторий... это также решит проблему (что является более чистым решением)

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