首页 > 解决方案 > Rails Assets,可以在生产模式下预编译和非编译吗?

问题描述

一个 Rails 6 应用程序,生产模式。

情况是这样的,我有许多将在视图中引用的图像文件。

有些是我预先准备好的,我可以在生产中使用应用程序预编译和部署这些图像资产。那里没有问题。

但是,应用程序在部署和运行时会不时以临时方式从远程源导入更多图像,这些图像也将在视图中被引用。

所以看起来我会有预编译和非编译图像的混合......感觉不对。

我想我根本无法预编译,并设置

config.assets.compile = true

但是 rails 文档指出不建议在生产模式下这样做。

我确定我不是第一个尝试做这样的事情的人,我想知道我是否忽略了一个久经考验的解决方案?

有任何想法吗 ?提前致谢。

标签: imageasset-pipelineruby-on-rails-6

解决方案


如果图像是在运行时获取或编译的,则它们不属于资产管道。管道的重点是简化部署和开发过程,以便在部署时自动编译/优化资产。资产是开发人员关注的 CSS、JS 和图像等文件。

AFAIK Rails 不可能同时使用这两种模式,也不是可取的,因为它会在生产中增加大量开销。

正如评论中提到的,这些图像应该与资产管道分开存储,最好是存储在针对 S3 等文件交付进行优化的云平台中,而不是存储在 Rails 应用程序中。您的应用程序应该只存储这些文件的 URL。

在处理用户文件上传和从远程源导入的方式之间没有重大区别,只是源略有不同。ActiveStorage 和 CarrierWave 等库可以在导入图像时在运行时进行图像转换。


推荐阅读