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 設定

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

rspec テスト部分

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

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

Factorygirl設定

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

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

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

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

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