mirror of
https://github.com/dergigi/boris.git
synced 2025-12-17 06:34:24 +01:00
fix: improve Redis initialization and add debugging for metadata fetch
- Support both KV_* and UPSTASH_* env var names for Redis - Add error handling for Redis get operations - Add console logging to track cache hits/misses and gateway fetches - Fix syntax error in background refresh trigger This will help diagnose why article metadata isn't being returned correctly.
This commit is contained in:
@@ -21,25 +21,35 @@ export default async function handler(req: VercelRequest, res: VercelResponse) {
|
||||
}
|
||||
|
||||
// Try Redis cache first
|
||||
let meta = await getArticleMeta(naddr)
|
||||
let meta = await getArticleMeta(naddr).catch((err) => {
|
||||
console.error('Failed to get article meta from Redis:', err)
|
||||
return null
|
||||
})
|
||||
let cacheMaxAge = 86400
|
||||
|
||||
if (!meta) {
|
||||
// Cache miss: try gateway (fast HTTP, no WebSockets)
|
||||
console.log(`Cache miss for ${naddr}, trying gateway...`)
|
||||
meta = await fetchArticleMetadataViaGateway(naddr)
|
||||
|
||||
if (meta) {
|
||||
console.log(`Gateway found metadata for ${naddr}:`, { title: meta.title, summary: meta.summary?.substring(0, 50) })
|
||||
// Gateway found metadata: store it and use it
|
||||
await setArticleMeta(naddr, meta).catch((err) => {
|
||||
console.error('Failed to cache gateway metadata:', err)
|
||||
})
|
||||
cacheMaxAge = 86400
|
||||
} else {
|
||||
console.log(`Gateway failed for ${naddr}, using default fallback`)
|
||||
// Gateway failed: use default fallback
|
||||
cacheMaxAge = 300
|
||||
}
|
||||
} else {
|
||||
console.log(`Cache hit for ${naddr}:`, { title: meta.title, summary: meta.summary?.substring(0, 50) })
|
||||
}
|
||||
|
||||
// Trigger background refresh (fire-and-forget)
|
||||
// Trigger background refresh on cache miss (fire-and-forget)
|
||||
if (!meta) {
|
||||
const secret = process.env.OG_REFRESH_SECRET || ''
|
||||
const origin = req.headers['x-forwarded-proto'] && req.headers['x-forwarded-host']
|
||||
? `${req.headers['x-forwarded-proto']}://${req.headers['x-forwarded-host']}`
|
||||
|
||||
@@ -1,8 +1,20 @@
|
||||
import { Redis } from '@upstash/redis'
|
||||
|
||||
const redisWrite = Redis.fromEnv()
|
||||
const redisRead = process.env.KV_REST_API_READ_ONLY_TOKEN && process.env.KV_REST_API_URL
|
||||
? new Redis({ url: process.env.KV_REST_API_URL!, token: process.env.KV_REST_API_READ_ONLY_TOKEN! })
|
||||
// Support both KV_* and UPSTASH_* env var names
|
||||
const redisUrl = process.env.UPSTASH_REDIS_REST_URL || process.env.KV_REST_API_URL
|
||||
const redisToken = process.env.UPSTASH_REDIS_REST_TOKEN || process.env.KV_REST_API_TOKEN
|
||||
const readOnlyToken = process.env.KV_REST_API_READ_ONLY_TOKEN
|
||||
|
||||
if (!redisUrl || !redisToken) {
|
||||
console.error('Missing Redis credentials: UPSTASH_REDIS_REST_URL/UPSTASH_REDIS_REST_TOKEN or KV_REST_API_URL/KV_REST_API_TOKEN')
|
||||
}
|
||||
|
||||
const redisWrite = redisUrl && redisToken
|
||||
? new Redis({ url: redisUrl, token: redisToken })
|
||||
: Redis.fromEnv() // Fallback to fromEnv() if explicit vars not set
|
||||
|
||||
const redisRead = readOnlyToken && redisUrl
|
||||
? new Redis({ url: redisUrl, token: readOnlyToken })
|
||||
: redisWrite
|
||||
|
||||
const keyOf = (naddr: string) => `og:${naddr}`
|
||||
|
||||
Reference in New Issue
Block a user