I'm in the process of porting a big SaaS platform from Rails 4.2 to Rails 5.2. Everything has been quite smooth until we discovered that the paperclip gem is no longer maintained; the author recommends moving to ActiveStorage. Unfortunately we found some ActiveStorage features to be a step back compared to Paperclip for our specific use case:
1) Attachments are not supposed to be accessed directly, but through a rails controller, which implements a redirect. The redirect URL is temporary.
The benefits of this approach are clear and very important in some contexts, but there are some drawbacks as well, especially for public facing sites:
- I think this behaviour could be marked as a problem by SEO analyzers, which usually require to minimize redirects
- it puts extra workload on clients, which need an extra HTTP request for each attachment
- the extra request is not made to a CDN, but to the central server, further increasing latency
- extra workload is put on the Rails stack increasing hosting costs
In some blog post I found the suggestion to use the service_url() method directly. This would have 2 drawbacks:
the URL is temporary, thus it cannot be cached
the URL is not SEO friendly
3) In the case of S3 there is no way to specify a folder where the attachment will be stored, the S3 bucket is supposed to be completely taken over by ActiveStorage. I think this is a good strategy in most cases, but if you are implementing a SaaS service using the Apartment gem like us, it really is a big issue. Basically in our system each client has a separate copy of all application tables, and with paperclip we easily managed to share the same bucket using different folders.
Now we would be supposed to create a different bucket for each client, which further require us to create a cloudfront instance for each of them, increasing management efforts and costs.
Please let me know if I misunderstood something or if you have any plan to address these issues.