9

我在资产管道中遇到了以下问题。

  • 我有一封带有图片的 HTML 电子邮件。
  • 我有测试涵盖成功发送电子邮件的情况。
  • 所有测试通过。
  • 投入生产时,要求发送电子邮件的功能被破坏,因为 HTML 布局引用了不存在的图像。

这显然适用于所有预编译资产。

在我看来,突然测试不再可靠。有什么办法可以避免这种情况再次发生?

4

2 回答 2

13

我从自己的案例中找到了完美的解决方案。如果你设置

 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。

于 2012-06-13T15:24:08.413 回答
2

比较 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是正确的,除非您更改它。

于 2012-06-13T07:23:18.033 回答