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