David Ko commited on
Commit
c4ce70b
·
1 Parent(s): e865931

fix(api): serve CRA build assets from nested static/static paths to avoid 404s

Browse files
Files changed (1) hide show
  1. api.py +37 -3
api.py CHANGED
@@ -1349,14 +1349,48 @@ def serve_index_html():
1349
  @app.route('/static/<path:filename>')
1350
  def static_files(filename):
1351
  print(f"Serving static file: {filename}")
1352
- return send_from_directory(app.static_folder, filename)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1353
 
1354
  # Add explicit handlers for JS files that are failing
1355
  @app.route('/static/js/<path:filename>')
1356
  def static_js_files(filename):
1357
  print(f"Serving JS file: {filename}")
1358
- js_path = os.path.join('js', filename)
1359
- return send_from_directory(app.static_folder, js_path)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1360
 
1361
  # 기본 경로 및 기타 경로 처리 (로그인 필요)
1362
  @app.route('/', defaults={'path': ''}, methods=['GET'])
 
1349
  @app.route('/static/<path:filename>')
1350
  def static_files(filename):
1351
  print(f"Serving static file: {filename}")
1352
+ # Two possible locations after CRA build copy:
1353
+ # 1) Top-level: static/<filename>
1354
+ # 2) Nested build: static/static/<filename>
1355
+ top_level_path = os.path.join(app.static_folder, filename)
1356
+ nested_dir = os.path.join(app.static_folder, 'static')
1357
+ nested_path = os.path.join(nested_dir, filename)
1358
+
1359
+ try:
1360
+ if os.path.exists(top_level_path):
1361
+ return send_from_directory(app.static_folder, filename)
1362
+ elif os.path.exists(nested_path):
1363
+ # Serve from nested build directory
1364
+ return send_from_directory(nested_dir, filename)
1365
+ else:
1366
+ # Fallback: try as-is (may help in some edge cases)
1367
+ return send_from_directory(app.static_folder, filename)
1368
+ except Exception as e:
1369
+ print(f"[DEBUG] Error serving static file '{filename}': {e}")
1370
+ # Final fallback to avoid leaking stack traces
1371
+ return ('Not Found', 404)
1372
 
1373
  # Add explicit handlers for JS files that are failing
1374
  @app.route('/static/js/<path:filename>')
1375
  def static_js_files(filename):
1376
  print(f"Serving JS file: {filename}")
1377
+ # Try top-level static/js and nested static/static/js
1378
+ top_js_dir = os.path.join(app.static_folder, 'js')
1379
+ nested_js_dir = os.path.join(app.static_folder, 'static', 'js')
1380
+ top_js_path = os.path.join(top_js_dir, filename)
1381
+ nested_js_path = os.path.join(nested_js_dir, filename)
1382
+
1383
+ try:
1384
+ if os.path.exists(top_js_path):
1385
+ return send_from_directory(top_js_dir, filename)
1386
+ elif os.path.exists(nested_js_path):
1387
+ return send_from_directory(nested_js_dir, filename)
1388
+ else:
1389
+ # As a fallback, let the generic static handler try
1390
+ return static_files(os.path.join('js', filename))
1391
+ except Exception as e:
1392
+ print(f"[DEBUG] Error serving JS file '{filename}': {e}")
1393
+ return ('Not Found', 404)
1394
 
1395
  # 기본 경로 및 기타 경로 처리 (로그인 필요)
1396
  @app.route('/', defaults={'path': ''}, methods=['GET'])