我在资产管道中遇到了以下问题。
- 我有一封带有图片的 HTML 电子邮件。
- 我有测试涵盖成功发送电子邮件的情况。
- 所有测试通过。
- 投入生产时,要求发送电子邮件的功能被破坏,因为 HTML 布局引用了不存在的图像。
这显然适用于所有预编译资产。
在我看来,突然测试不再可靠。有什么办法可以避免这种情况再次发生?
我在资产管道中遇到了以下问题。
这显然适用于所有预编译资产。
在我看来,突然测试不再可靠。有什么办法可以避免这种情况再次发生?
我从自己的案例中找到了完美的解决方案。如果你设置
config.assets.compile = false
config.assets.digest = true
在测试环境中,您的测试将依赖于预编译的资产。
由于在快速开发和测试阶段每次都预编译资产很烦人,在我的情况下,仅在 CI 上进行此配置就足够了。
您可以使用以下内容设置一个名为 ci_config.rb 的初始化程序:
if ENV['CI']
class YourApp::Application
config.assets.compile = false
config.assets.digest = true
end
end
并配置您的 CI 以运行 rake assets:precompile on start 和 rake assets:clean on end。
比较 application.rb、production.rb 和 development.rb 中的默认配置选项,并阅读在 Ruby on Rails 指南中配置 Rails 应用程序以了解选项。
重要的选项如下:
config.serve_static_assets
:将此设置为 false (生产默认值),然后,rails 将不会提供静态内容。
config.assets.compile
: 如果需要,是否使用资产管道编译资产。
如果您将以上两个选项设置为false
(这是生产的默认设置),那么您需要 1)预编译并将静态内容放置在适当的位置,2)配置 Web 服务器(可能是 apache 或 nginx)以根据需要提供静态内容。
因此,对于生产,您不仅需要放置文件,还需要配置 Web 服务器来为它们提供服务,或者您可以配置serve_static_assets
为即时创建资产。您可能需要调整测试配置,但测试serve_static_assets
是正确的,除非您更改它。