我有一个 Rails 应用程序,有多个模型与曲别针附件,都上传到 S3。这个应用程序还有一个很大的测试套件,经常运行。这样做的缺点是,每次测试运行时都会有大量文件上传到我们的 S3帐户,使得测试套件运行缓慢。它还稍微减慢了开发速度,并且需要您拥有一个互联网连接来处理代码。
是否有一种合理的方法来设置基于 Rails 环境的曲别针存储机制?理想情况下,我们的测试和开发环境将使用本地文件系统存储,而生产环境将使用 S3存储。
我还想将这个逻辑提取到某种类型的共享模块中,因为我们有几个需要这种行为的模型。我希望避免在每个模型中都有这样的解决方案:
### We don't want to do this in our models...
if Rails.env.production?
has_attached_file :image, :styles => {...},
:path => "images/:uuid_partition/:uuid/:style.:extension",
:storage => :s3,
:url => ':s3_authenticated_url', # generates an expiring url
:s3_credentials => File.join(Rails.root, 'config', 's3.yml'),
:s3_permissions => 'private',
:s3_protocol => 'https'
else
has_attached_file :image, :styles => {...},
:storage => :filesystem
# Default :path and :url should be used for dev/test envs.
end
更新: 粘性部分是,附件的 :path
和 :url
选项需要根据使用的存储系统而有所不同。
任何建议或意见将不胜感激! : -)