是否需要 运行 assets:precompile 仅 worker/ActionMailer 服务器?

Does it need to run assets:precompile on worker/ActionMailer only servers?

我使用 capistrano-rails 将我的 Rails 应用程序部署到生产服务器。除了常见的 appwebdb 角色外,我还为我的 sidekiq 工作服务器定义了 worker 角色。这些工作服务器还处理 ActionMailer 作业,在邮件视图中,我有 asset_urlimage_url 用于 <img> 标签的 src 属性。这是否意味着我需要通过将 worker 角色添加到 assets_roles 配置来在工作服务器上 运行 assets:precompile?还是我误解了这些不同角色的定义?

简答:可能

长答案:当您预编译资产时,会发生两件主要的事情。首先是图像、CSS、JS、字体等被处理并写入 public 目录,指纹作为 URL 的一部分。第二件事是创建一个清单文件,其中包含从原始资产名称到指纹文件名的映射(如果你想查看此文件,运行 bin/rake assets:precompile 然后查看 public/assets/.sprockets-manifest-*.json).

当您使用 asset_urlimage_url 方法时,他们做的第一件事就是查看生成的清单以获取相关资产的真实文件名。

因此,虽然工作人员不提供或查看资产,但它会查看清单,清单本身是通过创建所有资产生成的。因此,您确实需要预编译资产以了解主要网络服务器上资产的文件名,并正确填充链接。