Wercker测试无法打开临时文件

时间:2014-06-15 20:45:17

标签: ruby-on-rails tdd paperclip temporary-files wercker

在我的代码中,我有以下块

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 个答案:

答案 0 :(得分:3)

我想tmp文件夹在您的存储库中被忽略(.gitignore),因此在您执行干净的存储库克隆时不会创建它。

我可能错了,但Tempfile.open([model.id.to_s, '.txt'], Rails.root.join('tmp'))没有创建tmp文件夹,它预计它已经存在。

我对被忽略的文件夹有类似的问题 - 您可以使用干净的git clone进行测试,然后执行此测试,因为它将在CI / CD服务器上运行。

答案 1 :(得分:1)

问题是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并将其提交到您的回购...这也将解决问题(这是一个更清洁的解决方案)