Estou implantando no Heroku e incluí os seguintes scripts em meu package.json
:
"scripts": {
"heroku-postbuild": "yarn run build"
"start": "NODE_ENV=production node build/server.js"
}
Infelizmente, o PORT
env var não é conhecido no tempo de compilação e, em vez disso, é atribuído pelo Heroku no tempo de execução e, como o razzle precisa saber a porta no tempo de compilação, isso significa que devo compilar antes de iniciar o servidor. Com isso em mente, tentei alterar meus scripts para se parecerem com o seguinte:
"scripts": {
"start": "NODE_ENV=production yarn run build && node build/server.js"
}
Infelizmente, isso leva muito tempo e termina após o tempo limite do Heroku de 60 segundos:
2017-09-06T01: 23: 13.536789 + 00: 00 app [web.1]: Compilando cliente ...
2017-09-06T01: 23: 14.395857 + 00: 00 heroku [web.1]: Erro R10 (tempo limite de inicialização) -> O processo da Web falhou ao vincular a $ PORT em 60 segundos após o lançamento
2017-09-06T01: 23: 14.395963 + 00: 00 heroku [web.1]: Parando o processo com SIGKILL
2017-09-06T01: 23: 14.499913 + 00: 00 heroku [web.1]: Processo encerrado com status 137
2017-09-06T01: 23: 14.509625 + 00: 00 heroku [web.1]: Estado alterado de começando a travado
Existe uma maneira de não podermos exigir a porta no momento da construção? Por que é necessário então?
Você pode usar o razzle-heroku :) Ele estende a configuração padrão do razzle para fazê-lo funcionar no heroku.
Ahh, não sabia disso, obrigado por apontar isso! Se eu já tiver razzle.config.js
com uma função modify
, há uma maneira de ainda poder usá-la e, ao mesmo tempo, usar o razzle-heroku?
// razzle.config.js
const razzleHeroku = require("razzle-heroku")
module.exports = {
modify: (config, {target, dev}, webpack) => {
config = razzleHeroku(config, {target, dev}, webpack)
// do something to config
return config
},
}
Talvez algo assim?
Comentários muito úteis
Talvez algo assim?