2012-03-05 7 views
13

Ho iniziato a utilizzare Carrierwave e ho scoperto che memorizza i file temporanei in più posizioni a seconda che si tratti di test o di un processo in ritardo.Carrierwave temp directory impostata su uploads/tmp folder

Se eseguito durante il test (rspec), i file temporanei saranno nella directory RAILS_ROOT/uploads/tmp.

Se è fatto durante il lavoro in ritardo, i file temporanei saranno a RAILS_ROOT/public/uploads/tmp

In primo luogo, stavo pensando che rails_root/tmp/uploads sarebbe un luogo più sensato, o anche la cartella temporanea di sistema.

In secondo luogo, il test è diverso da quello normale, sembra un bug.

C'è un modo per risolvere questo problema (sia per configurazione o patch di scimmia)? E posso mettere le cose nella cartella RAILS_ROOT/tmp?

risposta

19

C'è l'opzione config.cache_dir che è possibile impostare in 'config/initializers/carrierwave.rb'. Ma è relativo a "/ pubblico". Sembra che si dovrebbe fare che nelle vostre uploaders:

class MyUploader < CarrierWave::Uploader::Base 

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

Funziona come un fascino. Si noti che è necessario riavviare la propria applicazione affinché ciò avvenga. –

+0

Ho anche aggiunto 'attr_writer cache_dir' alla classe e ho cambiato la funzione in' @cache_dir || Rails.root.join 'tmp/uploads'' per consentire sovrascritture per istanza (utile per isolare i file di test dai file di sviluppo). – Leo

+0

Qual è la differenza tra cache_dir e store_dir? – Jwan622

7

Im usando carrierwave 0.10.0 e sembra che questo comportamento è stato affrontato. Ora l'impostazione cache_dir accetta un percorso che è al di fuori della directory pubblica:

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

@ risposta di iKindred lavorato per me, ma ho pensato di espandere su come ho preso a lavorare on Rails 4.2.3 con CarrierWave 0,10 0,0:

dove mettere il blocco di configurazione

Come CarrierWave non è parte di Rails, il posto migliore per mettere il blocco di configurazione, secondo la mia lettura del Rails Guide, è un file di inizializzazione. Il nome può essere scelto arbitrariamente, ma deve risiedere in Rails.root/config/initializers. Ho scelto di dare un nome al file dopo il modulo che stavo configurando: Rails.root/config/initializers/carrier_wave.rb.

cosa mettere nel file di inizializzazione

trovo che ho eseguito i test mentre la mia applicazione Rails è in esecuzione in modalità development. Dopo i test pulisco tutti i file scollegando i percorsi di archiviazione come descritto in here. Affinché funzioni senza problemi con i file memorizzati dall'app Rails in esecuzione nella modalità development, i percorsi di archiviazione devono essere separati dall'ambiente! Pertanto, la mia versione modificata della risposta di @ iKindred è:

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