2012-03-05 5 views
13

Carrierwave를 사용하기 시작했으며 테스트 또는 지연 작업에 따라 여러 위치에 임시 파일을 저장한다는 사실을 알게되었습니다.Carrierwave 임시 디렉토리가 업로드/tmp 폴더로 설정 됨

테스트 도중 (rspec) 수행되면 임시 파일은 RAILS_ROOT/uploads/tmp 디렉토리에 있습니다.

이 지연 작업 중에 수행 할 경우, 임시 파일이 RAILS_ROOT/public/uploads/tmp

첫째로, 나는 rails_root/tmp/uploads 좀 더 분별있는 장소, 또는 시스템 임시 폴더 될 것이라고 생각됩니다.

둘째, 일반적인 실행과 다른 테스트는 버그처럼 보입니다.

구성 또는 원숭이 패치로 문제를 해결할 수 있습니까? 그리고 RAILS_ROOT/tmp 폴더에 것들을 넣을 수 있습니까?

답변

19

'config/initializers/carrierwave.rb'에서 설정할 수있는 config.cache_dir 옵션이 있습니다. 그러나 '/ public'과 관련이 있습니다. 업 로더에서 수행해야하는 것처럼 보입니다.

class MyUploader < CarrierWave::Uploader::Base 

    def cache_dir 
    # should return path to cache dir 
    Rails.root.join 'tmp/uploads' 
    end 
end 
+0

매력처럼 작동합니다. 이 작업을 수행하려면 응용 프로그램을 다시 시작해야합니다. –

+0

또한'attr_writer cache_dir'을 클래스에 추가하고 함수를'@cache_dir || Rails.root.join 'tmp/uploads' '를 사용하여 인스턴스 단위 재 지정을 허용합니다 (개발 파일에서 테스트 파일을 분리하는 데 유용함). – Leo

+0

cache_dir과 store_dir의 차이점은 무엇입니까? – Jwan622

7

i 사용하는 반송파가 0.10.0이며이 동작이 처리 된 것으로 보입니다. 이제 cache_dir 설정은 공용 디렉토리 외부에있는 경로를 허용합니다

CarrierWave.configure do |config| 
    config.cache_dir = Rails.root.join 'tmp/uploads' 
end 
1

iKindred의 대답은 나를 위해 일한,하지만 난 CarrierWave 0.10와 레일 4.2.3에서 작동하도록 내가 그것을 가지고 방법을 확장 거라고 생각 @ 0.0 : CarrierWave은 레일의 일부가 아닌 것처럼

가 어디 구성 블록을

을 넣어의 Rails Guide의 내 독서에 따라 구성 블록을 넣어하는 가장 좋은 장소, 이니셜 라이저 파일입니다. 이름은 임의로 선택할 수 있지만 Rails.root/config/initializers에 있어야합니다. 구성하고있는 모듈 다음에 파일의 이름을 지정하기로했습니다 : Rails.root/config/initializers/carrier_wave.rb.

내 레일 응용 프로그램은 development 모드에서 실행되는 동안 내가 테스트를 실행하는 것이 내가 찾을 초기화 파일

에 무엇을 넣어. 테스트 후 here과 같이 스토리지 경로의 연결을 해제하여 모든 파일을 정리합니다. development 모드에서 실행중인 Rails 앱에 저장된 파일을 사용하지 않고 작업하려면 환경에 따라 저장 경로를 구분해야합니다! 따라서 @ iKindred의 대답은 다음과 같습니다.

#config/initializers/carrier_wave.rb 
CarrierWave.configure do |config| 
    config.cache_dir = File.join(Rails.root, 'tmp', 'uploads', Rails.env) 
end 
관련 문제