【问题标题】:Does it need to run assets:precompile on worker/ActionMailer only servers?它是否需要运行 assets:precompile 在 worker/ActionMailer only 服务器上?
【发布时间】:2018-01-09 09:40:58
【问题描述】:
我使用capistrano-rails 将我的Rails 应用程序部署到生产服务器。除了常见的app、web、db 角色之外,我还为我的 sidekiq 工作服务器定义了worker 角色。这些工作服务器还处理ActionMailer 作业,在邮件程序视图中,<img> 标签的src 属性有asset_url 和image_url。这是否意味着我需要通过将worker 角色添加到assets_roles 配置来在工作服务器上运行assets:precompile?还是我误解了这些不同角色的定义?
【问题讨论】:
标签:
ruby-on-rails
capistrano3
【解决方案1】:
简答:可能
长答案:当您预编译资产时,会发生两件主要事情。首先是图像、CSS、JS、字体等被处理并写入公共目录,并将指纹作为 URL 的一部分。第二件事是创建了一个清单文件,其中包含从原始资产名称到指纹文件名的映射(如果要查看此文件,请运行bin/rake assets:precompile,然后查看public/assets/.sprockets-manifest-*.json)。
当您使用 asset_url 或 image_url 方法时,他们做的第一件事就是查看生成的清单以获取相关资产的真实文件名。
因此,虽然工作人员不服务或查看资产,但它会查看清单,清单本身是通过创建所有资产而生成的。因此,您确实需要预编译资产,以便了解主网络服务器上资产的文件名,并正确填充链接。