أنا أنشر إلى Heroku ، وقد قمت بتضمين البرامج النصية التالية في package.json
:
"scripts": {
"heroku-postbuild": "yarn run build"
"start": "NODE_ENV=production node build/server.js"
}
لسوء الحظ ، فإن var PORT
env غير معروف في وقت الإنشاء وبدلاً من ذلك تم تعيينه بواسطة Heroku في وقت التشغيل ، وبما أن razzle يحتاج إلى معرفة المنفذ في وقت الإنشاء ، فهذا يعني أنه يجب علي البناء قبل بدء تشغيل الخادم. مع وضع ذلك في الاعتبار ، حاولت تغيير البرامج النصية الخاصة بي لتبدو كما يلي:
"scripts": {
"start": "NODE_ENV=production yarn run build && node build/server.js"
}
لسوء الحظ ، يستغرق ذلك وقتًا طويلاً وينتهي بالربط بعد مهلة Heroku البالغة 60 ثانية:
2017-09-06T01: 23: 13.536789 + 00: 00 تطبيق [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
},
}
ربما شيء من هذا القبيل؟
التعليق الأكثر فائدة
ربما شيء من هذا القبيل؟