From 047070c5b3ead45e60179562242079e9f3f56739 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 13 Sep 2025 11:48:20 +0200 Subject: [PATCH] fix s3 migration (#8890) --- .../20250502230521-migrate-to-s3.ts | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/backend/src/db/migrations/20250502230521-migrate-to-s3.ts b/backend/src/db/migrations/20250502230521-migrate-to-s3.ts index 243b7f4e9..5dd1bbfb8 100644 --- a/backend/src/db/migrations/20250502230521-migrate-to-s3.ts +++ b/backend/src/db/migrations/20250502230521-migrate-to-s3.ts @@ -37,42 +37,38 @@ export async function up(_next) { urls = urls.filter((url) => url.startsWith('/uploads')) // eslint-disable-next-line no-console console.log('URLS uploaded:') - await Promise.all( - urls - .map((url) => async () => { - const { pathname } = new URL(url, 'http://example.org') - // TODO: find a better way to do this - this is quite a hack - const fileLocation = - CONFIG.NODE_ENV === 'production' - ? path.join(__dirname, `../../../../public/${pathname}`) // we're in the /build folder - : path.join(__dirname, `../../../public/${pathname}`) - const s3Location = `original${pathname}` - const mimeType = lookup(fileLocation) - // eslint-disable-next-line security/detect-non-literal-fs-filename - const fileHandle = await open(fileLocation) - const params = { - Bucket: AWS_BUCKET, - Key: s3Location, - ACL: ObjectCannedACL.public_read, - ContentType: mimeType || 'image/jpeg', - Body: fileHandle.createReadStream(), - } - const command = new Upload({ client: s3, params }) + for await (const url of urls) { + const { pathname } = new URL(url, 'http://example.org') + // TODO: find a better way to do this - this is quite a hack + const fileLocation = + CONFIG.NODE_ENV === 'production' + ? path.join(__dirname, `../../../../public/${pathname}`) // we're in the /build folder + : path.join(__dirname, `../../../public/${pathname}`) + const s3Location = `original${pathname}` + const mimeType = lookup(fileLocation) + // eslint-disable-next-line security/detect-non-literal-fs-filename + const fileHandle = await open(fileLocation) + const params = { + Bucket: AWS_BUCKET, + Key: s3Location, + ACL: ObjectCannedACL.public_read, + ContentType: mimeType || 'image/jpeg', + Body: fileHandle.createReadStream(), + } + const command = new Upload({ client: s3, params }) - const data = await command.done() - const { Location: spacesUrl } = data + const data = await command.done() + const { Location: spacesUrl } = data - const updatedRecord = await transaction.run( - 'MATCH (image:Image {url: $url}) SET image.url = $spacesUrl RETURN image.url as url', - { url, spacesUrl }, - ) - const [updatedUrl] = updatedRecord.records.map((record) => record.get('url') as string) - // eslint-disable-next-line no-console - console.log(updatedUrl) - return updatedUrl - }) - .map((p) => p()), - ) + const updatedRecord = await transaction.run( + 'MATCH (image:Image {url: $url}) SET image.url = $spacesUrl RETURN image.url as url', + { url, spacesUrl }, + ) + const [updatedUrl] = updatedRecord.records.map((record) => record.get('url') as string) + // eslint-disable-next-line no-console + console.log(updatedUrl) + // return updatedUrl + } await transaction.commit() } catch (error) { // eslint-disable-next-line no-console