Skip to content

Commit fbc3857

Browse files
committed
fixed the Railway deployment failing
1 parent 7f4f3f3 commit fbc3857

3 files changed

Lines changed: 14 additions & 7 deletions

File tree

backend/src/app.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { versionDeprecationMiddleware } from "./lib/version-deprecation.js";
3535

3636
export async function createApp({ redisClient }) {
3737
const app = express();
38+
const redisAvailable = Boolean(redisClient && redisClient.isOpen);
3839

3940
const __filename = fileURLToPath(import.meta.url);
4041
const __dirname = path.dirname(__filename);
@@ -200,17 +201,17 @@ export async function createApp({ redisClient }) {
200201
services: {
201202
database: dbOk ? "ok" : "unavailable",
202203
horizon: horizonOk ? "ok" : "unavailable",
203-
redis: "ok",
204+
redis: redisAvailable ? "ok" : "unavailable",
204205
},
205206
});
206207
});
207208

208209
const verifyPaymentRateLimit = createVerifyPaymentRateLimit({
209-
store: createRedisRateLimitStore({ client: redisClient }),
210+
store: redisAvailable ? createRedisRateLimitStore({ client: redisClient }) : undefined,
210211
});
211212

212213
const merchantRegistrationRateLimit = createMerchantRegistrationRateLimit({
213-
store: createRedisRateLimitStore({ client: redisClient }),
214+
store: redisAvailable ? createRedisRateLimitStore({ client: redisClient }) : undefined,
214215
});
215216

216217
// x402 pay-per-request on payment creation endpoints (custom middleware flow)

backend/src/lib/create-payment-rate-limit.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createHash } from "node:crypto";
2-
import rateLimit from "express-rate-limit";
2+
import rateLimit, { ipKeyGenerator } from "express-rate-limit";
33

44
const DEFAULT_CREATE_PAYMENT_RATE_LIMIT_MAX = 50;
55
const DEFAULT_CREATE_PAYMENT_RATE_LIMIT_WINDOW_MS = 60 * 1000;
@@ -44,7 +44,7 @@ export function getCreatePaymentRateLimitKey(req) {
4444
return `merchant:${req.merchant.id}`;
4545
}
4646

47-
return req.ip;
47+
return ipKeyGenerator(req.ip);
4848
}
4949

5050
export function getRetryAfterSeconds(resetTime, now = new Date(), windowMs = DEFAULT_CREATE_PAYMENT_RATE_LIMIT_WINDOW_MS) {

backend/src/server.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ validateEnvironmentVariables();
1616
const port = process.env.PORT || 4000;
1717

1818
async function startServer() {
19-
const redisClient = await connectRedisClient();
19+
let redisClient = null;
20+
try {
21+
redisClient = await connectRedisClient();
22+
logger.info("redis connected");
23+
} catch (err) {
24+
logger.warn({ err }, "redis unavailable, continuing with in-memory fallbacks");
25+
}
2026

2127
const { app, io } = await createApp({ redisClient });
2228

@@ -34,7 +40,7 @@ async function startServer() {
3440

3541
const results = await Promise.allSettled([
3642
probe("Database", () => pool.query("SELECT 1")),
37-
probe("Redis", () => redisClient.ping()),
43+
probe("Redis", () => (redisClient ? redisClient.ping() : Promise.reject(new Error("redis unavailable")))),
3844
probe("Horizon", () => isHorizonReachable())
3945
]);
4046

0 commit comments

Comments
 (0)