2016-06-28 18 views
12

Uso la funzione App di revisione integrata con Github su Heroku. In una delle mie app, ho impostato una variabile di ambiente chiamata HOST_NAME. Ad esempio, se il sito è http://www.purplebinder.com, allora HOST_NAME sarà impostato su www.purplebinder.com. È utilizzato in un paio di luoghi in cui lavoriamo con i cookie e nelle nostre e-mail transazionali.Imposta il nome host come variabile di ambiente nell'app di revisione Heroku

Quando apro una nuova richiesta di pull e avvio un'applicazione di revisione, HOST_NAME dovrebbe essere qualcosa come purplebinder-pr-27.herokuapp.com.

C'è un modo per impostare questo valore automaticamente? Il Heroku documentation on review apps dice che un env var può ereditare un valore dall'app padre o essere codificato in app.json. Nessuno di questi approcci funziona qui, perché il valore deve essere diverso ogni volta e anche diverso dall'app principale.

Heroku dice anche che un env var può essere impostato "tramite un generatore", ma non entra nei dettagli su cosa sia.

Questa domanda potrebbe essere un duplicato di Setting ROOT_URL for Review Apps, ma nessuno ha risposto a quello. È anche simile a How to get Heroku app name from inside the app, ma le risposte in questione implicavano l'esecuzione di uno script dopo la creazione dell'app: qui vorrei impostare questo valore come parte della build iniziale.

+4

Lottando con la stessa cosa attualmente - e direi che la risposta scelta in basso in realtà non rispondere alla domanda, in quanto 'HEROKU_APP_NAME' sarà' purplebinder- pr-27' nel tuo caso, non l'URL completo. Ho anche trovato questo che fornisce una spiegazione del commento "generatore" nei documenti: https://devcenter.heroku.com/articles/app-json-schema – woodardj

risposta

8

Da https://devcenter.heroku.com/articles/github-integration-review-apps#heroku_app_name-and-heroku_parent_app_name:

per aiutare con lo scripting, due Vars speciali di configurazione sono disponibili per recensione app. Se si specifica HEROKU_APP_NAME o HEROKU_PARENT_APP_NAME come richiesto o facoltativo di configurazione vars nel proprio file app.json, Heroku provvederà a impostare quelle variabili con il nuovo nome dell'applicazione e il nome dell'applicazione principale. Saranno quindi disponibili per lo script postdeploy in modo da poter eseguire un bootstrap avanzato più avanzato e la configurazione.

Ecco un app.json file di esempio che utilizza HEROKU_APP_NAME e 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

FYI, 'HEROKU_APP_NAME' è solo il nome. cioè 'my-app' non' my-app.herokuapp.com' quindi dovrai aggiungere manualmente il resto '.herokuapp.com' per ottenere un URL utilizzabile. – aNoble

+1

qual è il contenuto di 'bin/bootstrap' in questo esempio? Non riesco a impostare le variabili ENV heroku dall'interno dell'app. – toobulkeh

1

Ecco un approccio ignorando app.json per Rails installazioni:

nel relativo config/<environment>.rb. Io personalmente uso production.rb e la messa in scena fa solo riferimento a esso.

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 
... 

È un po 'fuorviante in quanto le variabili di ambiente heroku avranno ancora le vecchie variabili, ma funziona.

+0

Non devi aggiungere anche HEROKU_APP_NAME e HEROKU_PARENT_APP_NAME nell'app.json perché vengano declassificati negli script ruby? –

0

È inoltre possibile creare l'ambiente review per l'applicazione che copia staging.rb o production.rb da config/environments. Questo sarebbe utile.

Dopo aver aggiunto HEROKU_APP_NAME e HEROKU_PARENT_APP_NAME al numero app.json, è possibile impostare facilmente;

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" 
3

Se si aggiunge il heroku-buildpack-cli per la vostra applicazione genitore, allora vi permette di impostare le variabili d'ambiente dal post-deploy script. Il comando dovrebbe essere simile alla seguente:

heroku config:set HOST_NAME=${HEROKU_APP_NAME}.herokuapp.com --app ${HEROKU_APP_NAME} 
Problemi correlati