Я развертываюсь на Heroku, и я включил следующие скрипты в свой package.json
:
"scripts": {
"heroku-postbuild": "yarn run build"
"start": "NODE_ENV=production node build/server.js"
}
К сожалению, переменная PORT
env не известна во время сборки и вместо этого назначается Heroku во время выполнения, а поскольку razzle должен знать порт во время сборки, это означает, что я должен выполнить сборку перед запуском сервера. Имея это в виду, я попытался изменить свои скрипты, чтобы они выглядели следующим образом:
"scripts": {
"start": "NODE_ENV=production yarn run build && node build/server.js"
}
К сожалению, это занимает слишком много времени и заканчивается привязкой после 60-секундного тайм-аута Heroku:
2017-09-06T01: 23: 13.536789 + 00: 00 app [web.1]: Компиляция клиента ...
2017-09-06T01: 23: 14.395857 + 00: 00 heroku [web.1]: Ошибка R10 (тайм-аут загрузки) -> Веб-процессу не удалось выполнить привязку к $ PORT в течение 60 секунд после запуска
2017-09-06T01: 23: 14.395963 + 00: 00 heroku [web.1]: Остановка процесса с помощью SIGKILL
2017-09-06T01: 23: 14.499913 + 00: 00 heroku [web.1]: процесс завершен со статусом 137
2017-09-06T01: 23: 14.509625 + 00: 00 heroku [web.1]: состояние изменено с начала на сбой
Есть ли способ, которым мы не могли требовать порт во время сборки? Зачем это вообще тогда нужно?
Вы можете использовать razzle-heroku :) Он расширяет конфигурацию
Ах, не знал об этом, спасибо, что указали на это! Если у меня уже есть razzle.config.js
с пользовательской функцией modify
, могу ли я все еще использовать ее, используя 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
},
}
Может как то так?
Самый полезный комментарий
Может как то так?