我在Heroku上使用与Github集成的评论应用功能。在我的一个应用程序中,我设置了一个名为HOST_NAME
的环境变量。例如,如果网站为http://www.purplebinder.com,则HOST_NAME
将设置为www.purplebinder.com
。它在我们处理Cookie和交易电子邮件的几个地方使用过。
当我打开新的拉取请求并启动评论应用时,HOST_NAME
应该是purplebinder-pr-27.herokuapp.com
。
有没有办法自动设置此值? Heroku documentation on review apps表示env var可以从父应用继承值,也可以在app.json
中进行硬编码。这些方法都不适用于此,因为每次都需要使用不同的值,并且也与父应用程序不同。
Heroku还说可以通过生成器来设置env var"但是没有详细说明它是什么。
此问题可能与Setting ROOT_URL for Review Apps重复,但没有人回答过这个问题。它也类似于How to get Heroku app name from inside the app,但其中的答案涉及在创建应用程序后运行脚本 - 这里我想将此值设置为初始构建的一部分。
答案 0 :(得分:13)
为了帮助编写脚本,可以使用两个特殊的配置变量 审核应用。如果您指定
HEROKU_APP_NAME
或HEROKU_PARENT_APP_NAME
作为app.json
文件中的必需或可选配置变量,Heroku会 将这些配置变量设置为新的应用程序名称和父项 应用程序名称。然后它们将可用于 postdeploy脚本,以便您可以执行更高级的引导 和配置。以下是使用的示例
app.json
文件HEROKU_APP_NAME
和HEROKU_PARENT_APP_NAME
:{ "name":"Advanced App", "scripts": { "postdeploy": "rake db:setup && bin/bootstrap" }, "env": { "HEROKU_APP_NAME": { "required": true }, "HEROKU_PARENT_APP_NAME": { "required": true } } }
答案 1 :(得分:5)
如果您将heroku-buildpack-cli添加到您的父应用,那么您可以通过post-deploy script设置环境变量。该命令应如下所示:
heroku config:set HOST_NAME=${HEROKU_APP_NAME}.herokuapp.com --app ${HEROKU_APP_NAME}
答案 2 :(得分:1)
这是一种忽略Rails安装app.json
的方法:
config/<environment>.rb
中的。我个人使用production.rb
并暂存只是引用它。
if ENV.fetch("HEROKU_APP_NAME", "").include?("staging-pr-")
ENV["APPLICATION_HOST"] = ENV["HEROKU_APP_NAME"] + ".herokuapp.com"
ENV["ASSET_HOST"] = "https://" + ENV["APPLICATION_HOST"]
config.action_mailer.default_url_options = { host: ENV.fetch("APPLICATION_HOST") }
end
...
这有点误导,因为heroku环境变量仍然会有旧变量,但它可以工作。
答案 3 :(得分:0)
您还可以为review
或staging.rb
production.rb
创建config/environments
环境。这很有用。
将HEROKU_APP_NAME
和HEROKU_PARENT_APP_NAME
添加到app.json
后,您可以轻松设置;
config.action_mailer.default_url_options = { host: "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" }
config.action_mailer.asset_host = "http://#{ENV['HEROKU_APP_NAME']}.herokuapp.com"
config.action_controller.asset_host = "#{ENV['HEROKU_APP_NAME']}.herokuapp.com"
config.action_cable.url = "wss://#{ENV['HEROKU_APP_NAME']}.herokuapp.com/cable"