Hello, if George or somebody else has time to review this pr https://github.com/rails/rails/pull/34477 it would be greatly appreciated.
On Friday, November 2, 2018 at 11:38:54 PM UTC-4, Jonathan Fleckenstein wrote: > > Global with individual override would be perfect! I’ll try to put this > together and make a PR in the next couple days/weeks. Btw, David has been > grilling everybody on Twitter lately about working too much, might want to > be careful replying to this mailing list on a Friday night....😀 > > On Fri, Nov 2, 2018 at 11:29 PM George Claghorn <geo...@basecamp.com> > wrote: > >> I’m okay with adding proxy support in general, but a global setting seems >> less than ideal (unless it’s paired with a way to override it on a per-file >> basis). >> >> On Fri, Nov 2, 2018 at 11:22 PM Jonathan Fleckenstein < >> jonflec...@gmail.com> wrote: >> >>> The large cost really depends on your cache hit rate, for my personal >>> apps and my employer (a high traffic e-commerce site) static assets have >>> low miss rate as they never change and have long expiring headers. How >>> about giving the user the option, while keeping redirect as the default? >>> >>> ActiveStorage.delivery_method = :redirect # with options to set it to >>> :proxy or :direct >>> >>> redirect: >>> >>> - default >>> - semi private >>> - keeps provider abstraction >>> - slow image loading >>> - not CDN friendly >>> - keep existing service_urls_expire_in >>> >>> proxy: >>> >>> - CDN friendly >>> - no configuration when used with cloudflare and other similar >>> CDNs >>> - keeps provider abstraction >>> - could increase application server load >>> - defaults to a long service_urls_expire_in >>> >>> direct: >>> >>> - CDN friendly >>> - it takes more configuration than the proxy method >>> - breaks provider abstraction >>> - Changing providers will require a fair amount of config changes to >>> work with CDN >>> - less load on application server >>> - defaults to a long service_urls_expire_in >>> >>> On Friday, November 2, 2018 at 10:36:58 PM UTC-4, George Claghorn wrote: >>>> >>>> +1 for supporting publicly-available files. We’re almost certainly >>>> going to do that at some point. >>>> >>>> We needn’t tie it to proxying downloads, though. For larger apps, it’s >>>> no more desirable to take on the substantial cost of proxying for public >>>> files any more than for private ones. You can put a CDN in front of a >>>> public S3 or GCS bucket. >>>> >>>> On Fri, Nov 2, 2018 at 10:17 PM Jonathan Fleckenstein < >>>> jonfl...@gmail.com> wrote: >>>> >>>>> ActiveStorage should give users the option to proxy files. This would >>>>> allow files to be cached by a CDN (image load times for my application >>>>> went >>>>> from 500+ms to 50ms) 🚀. Something along the lines of this is what I'm >>>>> proposing: >>>>> >>>>> # frozen_string_literal: true >>>>> module ActiveStorage >>>>> >>>>> class BlobsController < BaseController >>>>> include ActiveStorage::SetBlob >>>>> >>>>> def show >>>>> if ActiveStorage.redirect_to_service_url >>>>> expires_in ActiveStorage.service_urls_expire_in >>>>> redirect_to @blob.service_url(disposition: >>>>> params[:disposition]) >>>>> else >>>>> stream_blob >>>>> end >>>>> end >>>>> >>>>> def stream_blob >>>>> expires_in ActiveStorage.service_urls_expire_in, public: true >>>>> response.headers['Content-Type'] = params[:content_type] >>>>> response.headers['Content-Disposition'] = params[:disposition] >>>>> >>>>> @blob.download do |chunk| >>>>> response.stream.write(chunk) >>>>> end >>>>> ensure >>>>> response.stream.close >>>>> end >>>>> end >>>>> end >>>>> >>>>> >>>>> Users looking for image loading with a CDN could set this up by setting >>>>> >>>>> app.config.active_storage.redirect_to_service_url = false >>>>> app.config.active_storage.service_urls_expire_in = 1.year >>>>> >>>>> I just threw this together for a project I'm working on, but I would >>>>> be happy to clean this up and make a proper pull request if the Rails >>>>> team >>>>> is open to the idea. There's a fair amount of people requesting this >>>>> feature https://github.com/rails/rails/issues/31419 some of the >>>>> solutions in this issue are directly linking to the service files, but >>>>> streaming would keep the service provider abstracted away while also >>>>> allowing for proper CDN caching. >>>>> >>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "Ruby on Rails: Core" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to rubyonrails-co...@googlegroups.com. >>>>> To post to this group, send email to rubyonra...@googlegroups.com. >>>>> Visit this group at https://groups.google.com/group/rubyonrails-core. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Core" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to rubyonrails-core+unsubscr...@googlegroups.com. >>> To post to this group, send email to rubyonrails-core@googlegroups.com. >>> Visit this group at https://groups.google.com/group/rubyonrails-core. >>> For more options, visit https://groups.google.com/d/optout. >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ruby on Rails: Core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to rubyonrails-core+unsubscr...@googlegroups.com. >> To post to this group, send email to rubyonrails-core@googlegroups.com. >> Visit this group at https://groups.google.com/group/rubyonrails-core. >> For more options, visit https://groups.google.com/d/optout. >> > -- > Jonathan Fleckenstein > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To post to this group, send email to rubyonrails-core@googlegroups.com. Visit this group at https://groups.google.com/group/rubyonrails-core. For more options, visit https://groups.google.com/d/optout.