TryGhost/Ghost · error · Error

Error going to signin page (${response.status})

Error message

Error going to signin page (${response.status})

What it means

Same navigation as 109, but goto() returned a response whose .ok is false (HTTP status >= 400). The signin page itself returned an error status (404, 500, 502, etc.). This points at the server, not the network: the request reached Ghost but Ghost (or the gateway) returned an error page.

Source

Thrown at e2e/helpers/pages/admin/login-page.ts:45

    async requestPasswordReset(email: string) {
        await this.emailAddressField.waitFor({state: 'visible'});
        await this.emailAddressField.fill(email);
        await this.forgotButton.click();
    }

    async logout() {
        await this.page.goto('/ghost/#/signout');
        await this.signInButton.waitFor({state: 'visible'});
    }

    async waitForLoginPageAfterUserCreated(): Promise<void> {
        const response = await this.goto();
        if (!response) {
            throw new Error('Error going to signin page (no response)');
        }
        if (!response.ok) {
            throw new Error(`Error going to signin page (${response.status})`);
        }
    }
}

View on GitHub (pinned to 47d8b0e2ad)

Solutions

  1. Inspect response.status — 5xx points to Ghost/gateway logs; 4xx to routing/assets.
  2. Check Ghost container logs and the admin build artifacts in the image (apps/ember-admin assets).
  3. Confirm baseURL points at /ghost and the gateway routes to the right upstream.
  4. Re-run waitForReady() before navigating; ensure setup completed.

Example fix

// before
if (!response.ok) throw new Error(`Error going to signin page (${response.status})`);

// after
if (!response.ok) {
    const body = await response.text().catch(() => '<no body>');
    throw new Error(`Signin page ${response.status}: ${body.slice(0, 200)}`);
}
Defensive patterns

Strategy: try-catch

Validate before calling

const r = await this.goto();
if (r && !r.ok) {
    // log status + body before the fixture throws, so the cause is visible
    const body = await r.text().catch(() => '<no body>');
    throw new Error(`signin ${r.status}: ${body.slice(0,200)}`);
}

Try / catch

const response = await this.goto();
if (!response) throw new Error('Error going to signin page (no response)');
if (!response.ok) {
    const body = await response.text().catch(() => '<no body>');
    throw new Error(`Error going to signin page (${response.status}): ${body.slice(0,200)}`);
}

Prevention

When it happens

Trigger: Ghost admin route returns 500 due to a boot error. Gateway returns 502 because the upstream Ghost container is misconfigured. /ghost/#/signin path returns 404 because admin assets are missing (bad image). Maintenance or rate-limit (429/503) responses.

Common situations: Broken admin build served by the image; gateway misroute; Ghost in a partially-booted state answering with errors; wrong baseURL path.

Related errors


AI-assisted analysis of TryGhost/Ghost@47d8b0e2ad (2026-08-13). Data as JSON: /api/errors/f07e1f5b1aff922b. Report an issue: GitHub.