-
Notifications
You must be signed in to change notification settings - Fork 368
Description
Impetus
As part of our efforts to upgrade to Ruby 3 and to upgrade the fog-aws gem to enable IMDSv2, we discovered a lot of inter-compatibility issues between the various fog gems.
For example, here are a few contributions we had to make or are in the process of making to ensure fog is working for our purposes:
- Don't escape safe characters in keys fog/fog-local#25
- Update Compute to use provider::service syntax fog/fog-aliyun#155
- Upgrade mime-types to 3.0 fog/fog-azure-rm#439
And we will likely have to contribute to fog/fog-google#422 if it does not move forward.
Not to mention the CF-specific branch of fog-azure-rm that we have been maintaining for years.
The particular gems are not being very actively maintained and there is not much effort to maintain inter-compatibility between them by maintainers.
In addition, we primarily (only?) use Fog to interface with S3 compatible blobstores, while the gems are designed to interface with other services like compute, dns, etc. If we find ourself needing to help maintain these gems, we are taking on the burden maintenance for services we do not use.
Alternative solutions
Since we primarily interface with blobstores, could we have a limited custom solution that only implements the actions we need.
Could we utilize individual gems that are actually created by providers:
https://github.com/Azure/azure-storage-ruby
https://github.com/googleapis/google-cloud-ruby/tree/main/google-cloud-storage
https://github.com/aws/aws-sdk-ruby
Could we somehow utilize ActiveStorage? It seems like it's baked into ActiveRecord, which is unfortunate, but maybe we can extract some of the abstractions they use around file uploads and other actions.
Reasons not to do
Could be a lot of work