change - Establecer el nombre de host como una variable de entorno en la aplicación de revisión Heroku
heroku config environment variable (4)
Estoy usando la función Review Apps integrada con Github en Heroku. En una de mis aplicaciones, configuro una variable de entorno llamada HOST_NAME
. Por ejemplo, si el sitio es http://www.purplebinder.com , HOST_NAME
se establecería en www.purplebinder.com
. Se utiliza en un par de lugares donde trabajamos con cookies y en nuestros correos electrónicos transaccionales.
Cuando abro una nueva solicitud de extracción y HOST_NAME
una aplicación de revisión, HOST_NAME
debería ser algo así como purplebinder-pr-27.herokuapp.com
.
¿Hay una manera de establecer este valor automáticamente? La documentación de Heroku sobre las aplicaciones de revisión dice que una variable env puede heredar un valor de la aplicación principal o estar codificada en forma app.json
en app.json
. Ninguno de estos enfoques funciona aquí, porque el valor debe ser diferente cada vez, y también diferente de la aplicación principal.
Heroku también dice que una variable env puede configurarse "a través de un generador", pero no entra en detalles sobre qué es eso.
Esta pregunta podría ser un duplicado de la configuración de ROOT_URL para las aplicaciones de revisión , pero nadie respondió a esa. También es similar a Cómo obtener el nombre de la aplicación Heroku desde dentro de la aplicación , pero las respuestas allí implicaron ejecutar un script después de que se creó la aplicación. Aquí me gustaría establecer este valor como parte de la compilación inicial.
Aquí hay un enfoque que ignora app.json
para las instalaciones de Rails:
en la config/<environment>.rb
relativa config/<environment>.rb
. Personalmente uso production.rb
y la puesta en escena simplemente hace referencia a él.
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
...
Es un poco engañoso, ya que las variables de entorno heroku seguirán teniendo las variables anteriores, pero funciona.
Para ayudar con las secuencias de comandos, hay dos configuraciones especiales disponibles para revisar las aplicaciones. Si especifica
HEROKU_APP_NAME
oHEROKU_PARENT_APP_NAME
como vars de configuración requeridos u opcionales en su archivoapp.json
, Heroku establecerá esos vars de configuración al nuevo nombre de la aplicación y al nombre de la aplicación principal, respectivamente. Luego estarán disponibles para su uso en la secuencia de comandos posterior a la implementación para que pueda realizar una configuración y un arranque más avanzados.Aquí hay un ejemplo de archivo
app.json
que usaHEROKU_APP_NAME
yHEROKU_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 } } }
Si agrega heroku-buildpack-cli a su aplicación principal, entonces le permite establecer variables de entorno desde su script posterior a la implementación . El comando debe parecerse a lo siguiente:
heroku config:set HOST_NAME=${HEROKU_APP_NAME}.herokuapp.com --app ${HEROKU_APP_NAME}
También puede crear un entorno de review
para su aplicación copiando staging.rb
o production.rb
desde config/environments
. Esto sería útil.
Después de agregar HEROKU_APP_NAME
y HEROKU_PARENT_APP_NAME
a tu app.json
, puedes configurar fácilmente;
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"