Merge pull request #25 — fix(emex): scripts/ + chromium executablePath
This commit was merged in pull request #25.
This commit is contained in:
@@ -63,6 +63,9 @@ COPY --from=build /app/apps/api/nest-cli.json ./apps/api/
|
|||||||
COPY --from=build /app/apps/api/drizzle ./apps/api/drizzle
|
COPY --from=build /app/apps/api/drizzle ./apps/api/drizzle
|
||||||
COPY --from=build /app/apps/api/start.sh ./apps/api/start.sh
|
COPY --from=build /app/apps/api/start.sh ./apps/api/start.sh
|
||||||
|
|
||||||
|
# Runtime scripts (EMEX VIN scraper, etc.) loaded by EmexService via require()
|
||||||
|
COPY --from=build /app/scripts ./scripts
|
||||||
|
|
||||||
RUN corepack enable && corepack prepare pnpm@10.29.3 --activate \
|
RUN corepack enable && corepack prepare pnpm@10.29.3 --activate \
|
||||||
&& pnpm install --frozen-lockfile --prod \
|
&& pnpm install --frozen-lockfile --prod \
|
||||||
&& pnpm store prune
|
&& pnpm store prune
|
||||||
|
|||||||
@@ -165,6 +165,12 @@ export class EmexBrowserService implements OnModuleInit, OnModuleDestroy {
|
|||||||
// Dynamic import — playwright is a devDependency
|
// Dynamic import — playwright is a devDependency
|
||||||
const { chromium } = await import("playwright");
|
const { chromium } = await import("playwright");
|
||||||
|
|
||||||
|
// PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH only influences `playwright install`;
|
||||||
|
// chromium.launch() at runtime ignores it unless we forward it explicitly.
|
||||||
|
// Alpine images don't ship the bundled chromium-headless-shell that
|
||||||
|
// Playwright otherwise looks for under /root/.cache/ms-playwright/, so
|
||||||
|
// without this hand-off the production container fails with
|
||||||
|
// "Executable doesn't exist at …chrome-headless-shell".
|
||||||
const launchOptions: Record<string, unknown> = {
|
const launchOptions: Record<string, unknown> = {
|
||||||
headless: true,
|
headless: true,
|
||||||
args: [
|
args: [
|
||||||
@@ -175,6 +181,8 @@ export class EmexBrowserService implements OnModuleInit, OnModuleDestroy {
|
|||||||
"--disable-gpu",
|
"--disable-gpu",
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
const executablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH;
|
||||||
|
if (executablePath) launchOptions.executablePath = executablePath;
|
||||||
|
|
||||||
if (this.useProxy) {
|
if (this.useProxy) {
|
||||||
const port = this.randomProxyPort();
|
const port = this.randomProxyPort();
|
||||||
|
|||||||
@@ -615,7 +615,10 @@ export class PartsCatalogsAuthService implements OnModuleInit, OnModuleDestroy {
|
|||||||
private async _doLaunch(): Promise<void> {
|
private async _doLaunch(): Promise<void> {
|
||||||
const { chromium } = await import("playwright");
|
const { chromium } = await import("playwright");
|
||||||
|
|
||||||
this.browser = await chromium.launch({
|
// See emex.browser.ts:_doLaunch — PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH is
|
||||||
|
// a `playwright install` knob, not a launch knob, so forward it manually
|
||||||
|
// for Alpine production where the bundled headless shell isn't installed.
|
||||||
|
const launchOptions: Record<string, unknown> = {
|
||||||
headless: true,
|
headless: true,
|
||||||
args: [
|
args: [
|
||||||
"--no-sandbox",
|
"--no-sandbox",
|
||||||
@@ -624,7 +627,11 @@ export class PartsCatalogsAuthService implements OnModuleInit, OnModuleDestroy {
|
|||||||
"--disable-accelerated-2d-canvas",
|
"--disable-accelerated-2d-canvas",
|
||||||
"--disable-gpu",
|
"--disable-gpu",
|
||||||
],
|
],
|
||||||
});
|
};
|
||||||
|
const executablePath = process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH;
|
||||||
|
if (executablePath) launchOptions.executablePath = executablePath;
|
||||||
|
|
||||||
|
this.browser = await chromium.launch(launchOptions);
|
||||||
|
|
||||||
this.browser.on("disconnected", () => {
|
this.browser.on("disconnected", () => {
|
||||||
this.logger.warn("Browser disconnected — will relaunch on next request");
|
this.logger.warn("Browser disconnected — will relaunch on next request");
|
||||||
|
|||||||
Reference in New Issue
Block a user