J'utilise la fonctionnalité Review Apps intégrée à Github sur Heroku. Dans l'une de mes applications, j'ai défini une variable d'environnement appelée Host_NAME
. Par exemple, si le site est http://www.purplebinder.com , alors Host_NAME
sera défini sur www.purplebinder.com
. Il est utilisé dans quelques endroits où nous travaillons avec des cookies et dans nos emails transactionnels.
Lorsque j'ouvre une nouvelle demande d'extraction et lance une application de révision, Host_NAME
devrait ressembler à purplebinder-pr-27.herokuapp.com
.
Est-il possible de définir cette valeur automatiquement? La documentation Heroku sur les applications de révision indique qu'une variable env peut hériter d'une valeur de l'application parent ou être codée en dur dans app.json
. Aucune de ces approches ne fonctionne ici, car la valeur doit être différente à chaque fois et différente de l'application parent.
Heroku indique également qu'une variable env peut être définie "via un générateur", mais n'entre pas dans les détails à ce sujet.
Cette question peut être un doublon de Définition de ROOT_URL pour les applications de révision , mais personne n’a répondu à cette question. C'est aussi similaire à Comment obtenir le nom de l'application Heroku depuis l'intérieur de l'application , mais les réponses impliquaient l'exécution d'un script après la création de l'application - j'aimerais ici définir cette valeur dans le cadre de la construction initiale.
Pour vous aider dans la rédaction de scripts, deux applications de configuration spéciales sont disponibles pour Les applications de révision. Si vous indiquez
HEROKU_APP_NAME
ouHEROKU_PARENT_APP_NAME
En tant que variables de configuration requises ou facultatives dans votre fichierapp.json
, Heroku Définira ces vars de configuration sur le nouveau nom de l'application et sur le nom de l'application parent Respectivement. Ils seront ensuite disponibles pour une utilisation dans Le script post-déploiement afin que vous puissiez effectuer un amorçage et une configuration plus avancés .Voici un exemple de fichier
app.json
qui utiliseHEROKU_APP_NAME
etHEROKU_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 vous ajoutez le heroku-buildpack-cli à votre application parent, vous pourrez alors définir des variables d'environnement à partir de votre script post-déploiement . La commande devrait ressembler à ceci:
heroku config:set Host_NAME=${HEROKU_APP_NAME}.herokuapp.com --app ${HEROKU_APP_NAME}
Voici une approche qui ignore app.json
pour les installations Rails:
dans le config/<environment>.rb
relatif. Personnellement, j'utilise production.rb
et la mise en scène s'y réfère simplement.
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
...
C'est un peu trompeur car les variables d'environnement heroku auront toujours les anciennes variables, mais cela fonctionne.
Vous pouvez également créer un environnement review
pour votre application en copiant staging.rb
ou production.rb
à partir de config/environments
. Cela serait utile.
Après avoir ajouté HEROKU_APP_NAME
et HEROKU_PARENT_APP_NAME
à votre app.json
, vous pouvez facilement définir;
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"