Rails, Amazon S3 storage, CarrierWave-Direct and delayed_job - is this right? -
i've discovered heroku doesn't have long-term file storage need move using s3 or similar. lot of new bits , pieces head around have understood how direct upload s3 using carrierwave-direct
, processing delayed_job
should work rails app?
what think should happen if code correctly following:
- i sign s3 account, set-up bucket(s) , authentication details etc need program in (suitably hidden users)
- i make sure direct upload white lists don't stop cross-domain preventing uploads (and later downloads)
- i use
carrierwave
&carrierwave-direct
(or similar) create uploads avoid loading app during uploads - s3 create random access ('filename') information don't need worry multiple users uploading files same name , files getting overwritten; if care original names can use metadata store them.
carrierwave-direct
redirects users browser 'upload completed' url after upload can either create delayed_job or popup 'sorry, went wrong' notification.- at point user knows job attempted , move on other stuff.
- my
delayed_job
task accesses file using s3 apis , can delete input file when completed. delayed_job
completes , notifies user in usual way e.g. e-mail.
is or missing something? thanks.
you have understanding of process need. throw 1 more layer of complexity @ you---you should wrap of in rails new(er) activejob. activejob facilities background processing inside rails via processor of choosing (in case delayedjobs). then, can create jobs via rails generator:
bin/rails g job process_this_thing
active jobs offers few "rails way" of handling jobs...but, allows switch processors less hassle.
so, create carrierwave uploader (see carrierwave docs). then, attach uploader model. carrierwave_direct need disassociate file field models form , move file field own form (use form url method provided carrierwave-direct).
you can choose upload file, save record. or, save record , process file. set-up process different depending on choose.
carrierwave , carrierwave-direct know save file based on fog credentials put in carrierwave initializer , using store_dir path, if set, in uploader.
carrierwave provides uploader, define versions, etc. carrierwave_direct facilities uploading direct s3 bucket , processing versions in background. active jobs, via delayedjobs, provides background processing. fog link between carrierwave , s3 bucket.
you should add boolean flag model set true when carrierwave_direct uploads image , set false when job finishing processing versions. way, instead of broken link (while job running , not yet complete) view show 'this thing still processing...'.
railscast perfect resource completing task. check out: https://www.youtube.com/watch?v=5mj55_bu_jm
Comments
Post a Comment