NPM Модуль: "@ ntegral / nest js -s3": "^ 1.0.2",
Приложение API отдыха: Nest js
Код для обслуживания который выдает ошибку при развертывании в Heroku
async deleteImage(filename: string): Promise<{message: string}> {
if(filename !== undefined || filename !== null) {
const param = {
Bucket: 'myblogbucket1',
Key: `authorProfile/${filename}`
}
this.s3.deleteObject(param)
return {message: `deleted ${filename}`};
}
И контроллер, который обрабатывает этот код:
@Delete('/deletefile/:filename')
async deleteOldImage(
@Param('filename') filename: string
): Promise<{message: string}> {
return this.profileService.deleteImage(filename)
}
И вот этот модуль импортирует настройки в модуле профиля внутри Nest js Приложение
S3Module.forRoot({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
}),
Как только я создаю это приложение, используя
npm run start:dev
Это прекрасно работает, когда я нажимаю это через почтальона на сервер. В AWS S3 bucket файл удаляется.
Что-то вроде:
http://localhost:3000/profile/deletefile/131bc7c5-d6e3-4cdf-bdf7-b55448a0f14f.jpeg
Но когда я пытаюсь набрать sh этот код на героку, он выдает ошибку сборки.
Вот стек
<--- Last few GCs --->
2020-04-30T12:08:43.064905+00:00 app[web.1]:
2020-04-30T12:08:43.064908+00:00 app[web.1]: [58:0x342e9e0] 12037 ms: Mark-sweep 255.5 (257.0) -> 255.0 (257.3) MB, 331.4 / 0.0 ms (average mu = 0.138, current mu = 0.027) allocation failure scavenge might not succeed
2020-04-30T12:08:43.064908+00:00 app[web.1]: [58:0x342e9e0] 12517 ms: Mark-sweep 255.6 (257.3) -> 255.2 (257.8) MB, 469.7 / 0.0 ms (average mu = 0.071, current mu = 0.022) allocation failure scavenge might not succeed
2020-04-30T12:08:43.064909+00:00 app[web.1]:
2020-04-30T12:08:43.064909+00:00 app[web.1]:
2020-04-30T12:08:43.064909+00:00 app[web.1]: <--- JS stacktrace --->
2020-04-30T12:08:43.064909+00:00 app[web.1]:
2020-04-30T12:08:43.064910+00:00 app[web.1]: ==== JS stack trace =========================================
2020-04-30T12:08:43.064910+00:00 app[web.1]:
2020-04-30T12:08:43.064911+00:00 app[web.1]: 0: ExitFrame [pc: 0x13c5b79]
2020-04-30T12:08:43.064911+00:00 app[web.1]: 1: StubFrame [pc: 0x134ca01]
2020-04-30T12:08:43.064912+00:00 app[web.1]: Security context: 0x0a541a0408d1 <JSObject>
2020-04-30T12:08:43.064913+00:00 app[web.1]: 2: parseStatement(aka parseStatement) [0x26ae695381c1] [/app/node_modules/typescript/lib/typescript.js:~23390] [pc=0x33711f1a8be3](this=0x1040d0c004b1 <undefined>)
2020-04-30T12:08:43.064914+00:00 app[web.1]: 3: parseList(aka parseList) [0x26ae69535141] [/app/node_modules/typescript/lib/typescript.js:~20041] [pc=0x33711f1be0c0](this=0x1040d0c004b1 <undefined>,1,0x26a...
2020-04-30T12:08:43.064914+00:00 app[web.1]:
2020-04-30T12:08:43.064921+00:00 app[web.1]: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
2020-04-30T12:08:43.065228+00:00 app[web.1]:
2020-04-30T12:08:43.078709+00:00 app[web.1]: Writing Node.js report to file: report.20200430.120843.58.0.001.json
2020-04-30T12:08:43.078710+00:00 app[web.1]: Node.js report completed
2020-04-30T12:08:43.078711+00:00 app[web.1]: 1: 0xa09830 node::Abort() [node]
2020-04-30T12:08:43.078711+00:00 app[web.1]: 2: 0xa09c55 node::OnFatalError(char const*, char const*) [node]
2020-04-30T12:08:43.078712+00:00 app[web.1]: 3: 0xb7d71e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
2020-04-30T12:08:43.078713+00:00 app[web.1]: 4: 0xb7da99 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
2020-04-30T12:08:43.078713+00:00 app[web.1]: 5: 0xd2a1f5 [node]
2020-04-30T12:08:43.078713+00:00 app[web.1]: 6: 0xd2a886 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector) [node]
2020-04-30T12:08:43.081317+00:00 app[web.1]: 7: 0xd37105 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageCollector, v8::GCCallbackFlags) [node]
2020-04-30T12:08:43.081318+00:00 app[web.1]: 8: 0xd37fb5 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [node]
2020-04-30T12:08:43.081319+00:00 app[web.1]: 9: 0xd3aa6c v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::AllocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment) [node]
2020-04-30T12:08:43.081320+00:00 app[web.1]: 10: 0xd0163b v8::internal::Factory::NewFillerObject(int, bool, v8::internal::AllocationType, v8::internal::AllocationOrigin) [node]
2020-04-30T12:08:43.081320+00:00 app[web.1]: 11: 0x104300e v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long*, v8::internal::Isolate*) [node]
2020-04-30T12:08:43.082018+00:00 app[web.1]: 12: 0x13c5b79 [node]
2020-04-30T12:08:43.174500+00:00 app[web.1]: Aborted
Теперь, когда я удаляю этот сервисный метод и контроллер, развертывание проходит успешно. Это означает, что это не ошибка, связанная с Heroku Dyno или пределами памяти. Мое приложение также только 58 Мб, и у меня есть 512.
После поиска в течение 2 дней я обнаружил, что в моем методе происходит какое-то бесконечное число l oop, и из-за этого эта сборка падает при развертывании на героку. Как говорится JavaScript куча нехватки памяти. Но я не могу найти проблему, так как это работает нормально, когда я запускаю это приложение на localhost: 3000. а также я новичок в бэкэнде.
Может кто-нибудь исправить этот код, чтобы он мог также без ошибок развертываться и запускаться на Heroku. Помните, что этот код работает на локальном хосте без каких-либо проблем, и приложение также собирается на моем P C.