Rspec+GuardでCarrierwaveを使用していると一時的にハングアップする


rspecをguardで自動化して実行した際に、Carrierwaveを使用した処理の実行後にrubyプロセスのCPU使用率が数十秒100%近い状態になります。

  * rails 4.2.0
  * rspec 3.2.0
  * guard 2.12.4
  * guard-rspec 4.5.0
  * carrierwave 0.10.0
  * factory_girl 4.5.0

環境は上記の通りです。

通常のコマンドからrspecを実行するとrubyプロセスのCPUの使用率はすぐに終了します。  
しかしguardを使用してspecファイルの変更を検出しての実行の際には数十秒間CPUが100%近くなり、処理が止まります（次の変更の検知・実行までタイムラグがある）。

概要は以下のとおりで、

# user モデル

imageというattributeを持っており、`mount_uploader :image, UserImageUploader`として設定。

# carrierwave 設定

[code]

    CarrierWave.configure do |config|
      if Rails.env.production? || Rails.env.staging?
        config.fog_credentials = { ### }
        config.asset_host = Settings.asset_host
        config.fog_public = true
        config.fog_directory = Rails.application.secrets.IMAGE_BUCKET
        config.storage :fog
      else
        config.storage :file
      end
    
      if Rails.env.test?
        config.enable_processing = false
      end
    end
    
[/code]

# rspec テスト部分

[code]

    describe 'PATCH #update_image' do
      let!(:user_attributes) { attributes_for(:user_image) }
      before { xhr :patch, :update_image, user: user_attributes }
    
      it { expect(flash.now[:notice]).not_to be_nil }
      it { expect(response).to render_template :update_image }
    end
    
[/code]

上記のitのexample部分が実行された際にCPUがハングアップします。  
また、FactoryGirlは以下のように記述しており、`Rack::Test::UploadedFile.new`を`fixture_file_upload`や`ActionDispatch::Http::UploadedFile.new`で設定しても変わりありません。

# Factorygirl設定

[code]

    factory :user_image, class: 'User' do
        image Rack::Test::UploadedFile.new(File.open(File.join(Rails.root, "/spec/assets/blank.png")), 'image/png')
      end
    
[/code]

Guardファイルの設定は以下のようになっています。`spring`を使用していますが、springを使用しない場合も同様でした。

[code]

    guard :rspec, cmd: 'spring rspec -f progress', all_on_start: false, all_after_pass: false do
      watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
      watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$})          { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
      watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
    
    end
    
[/code]

factory_girlの設定で、imageの項目にnilを設定するとハングアップしないので、Carrierwaveの処理が原因だと思うのですが、何か対処の仕方やなどありましたらご教授ください。

ちなみに、uploadするファイル自体は小さな画像ファイルで、実際にアップロードして検証した画像ファイルなども試しました。




自己回答です。

`Guardfile`に以下のように`ignore`を記述すれば発生しなくなりました。

[code]

    ignore /public/
    
[/code]




自己回答です。

`Guardfile`に以下のように`ignore`を記述すれば発生しなくなりました。

[code]

    ignore /public/
    
[/code]

