我对凤凰城端点配置中host:
参数如何工作感到困惑。
我分别使用不同的URL部署到不同的Heroku应用程序(prod和staging)。我想将主机URL配置为动态的,来自环境变量,如下所示:
config :testapp, TestApp.Endpoint,
http: [port: {:system, "PORT"}],
url: [scheme: "https", host: {:system, "HOST"}, port: 443],
cache_static_manifest: "priv/static/manifest.json",
force_ssl: [rewrite_on: [:x_forwarded_proto]],
secret_key_base: System.get_env("SECRET_KEY_BASE")
但是,在部署之后,我的资产网址不再具有由phoenix.digest
设置的唯一哈希值,这是一个交易破坏者。
有趣的是,当我对URL进行硬编码时:
config :testapp, TestApp.Endpoint,
http: [port: {:system, "PORT"}],
url: [scheme: "https", host: "someapp-staging.herokuapp.com", port: 443],
cache_static_manifest: "priv/static/manifest.json",
force_ssl: [rewrite_on: [:x_forwarded_proto]],
secret_key_base: System.get_env("SECRET_KEY_BASE")
即使它与Heroku应用程序网址不匹配,一切似乎仍然正常,资产网址也是正确的。例如。我可以使用网址foo.herokuapp.com
部署到应用,但一切仍然有效。
上面的配置来自prod.exs
,我使用elixir和phoenix静态自定义buildpacks,使用以下配置:
# elixir_buildpack.config
# Elixir version
elixir_version=1.2.3
# Always rebuild from scratch on every deploy?
always_rebuild=true
# ENV variables
config_vars_to_export=(DATABASE_URL HOST)
和
# phoenix_static_buildpack.config
# We can set the version of Node to use for the app here
node_version=5.10.0
# We can set the version of NPM to use for the app here
npm_version=3.8.3
# ENV variables
config_vars_to_export=(DATABASE_URL HOST)
我可能会引入一个单独的staging.exs
配置文件并设置MIX_ENV=staging
,但我想了解一下:
1)为什么使用{:system, "HOST"}
打破已消化的资产网址
2)为什么任何字符串在不同的应用程序和URL上都能正常工作
感谢任何帮助!
答案 0 :(得分:0)
默认情况下,Heroku没有名为HOST
的环境变量(尽管PORT
可用)。我会仔细检查你是否在Heroku设置中将它添加为配置变量。
命令heroku run printenv
非常方便,因为它会输出基本环境变量和手动添加的配置变量或附加组件。