在提出问题之前,我需要提供一些背景信息:
CONTEXT
我有一个 Phoenix 应用程序正在部署到 Heroku 。默认情况下,早午餐用于编译静态资产,例如.js
,.css
和图片。
./assets
上(从 Phoenix 1.3 开始)。./priv/static/
。在资产为digested using MD5 fingerprinting之后,编译过程会生成cache_manifest.json
。
重要的是要注意我使用 CloudFlare的免费版本作为CDN。
我并不关心用户上传的资产,我在谈论应用的资产
相关部分的应用config/prod.exs
config :bespoke_work, BespokeWork.Web.Endpoint,
on_init: {BespokeWork.Web.Endpoint, :load_from_system_env, []},
http: [port: {:system, "PORT"}],
url: [scheme: "https", host: System.get_env("HEROKU_HOST"), port: System.get_env("HEROKU_PORT")],
static_url: [scheme: "https", host: System.get_env("STATIC_ASSETS"), port: 443],
force_ssl: [rewrite_on: [:x_forwarded_proto]],
cache_static_manifest: "priv/static/cache_manifest.json",
secret_key_base: System.get_env("SECRET_KEY_BASE")```
问题
如何阻止Heroku构建资产,而是在部署期间自动将消化的资产上传到 Amazon S3 存储桶?
这会让Heroku的slug变小吗?
可能的解决方案
减少 Heroku的 Slug Size:
•在Procfile
重定向mix phx.digest
上将消化的项目输出到/dev/null
。
或
•为 Prod 重新定义mix deps.compile
,而不是生成资产。
static_url
生成“指向” S3 Bucket 的路径。•有没有更简单的方法来实现这一目标?•
答案 0 :(得分:0)
这不是一个好主意......它甚至可能被认为是一种反模式。
但是,如果由于某种原因,这是绝对必要的,这是一种方法:
Heroku allows the use of a .slugignore
文件(例如 .pdf 或 .psd )
和/或
slug cleaner buildpack会在处理完所有非必需的静态资产后清除它们。
•这应该通过shell脚本完成。