soyailabs / app.py
GitHub Actions
Auto-deploy from GitHub Actions - 2025-12-16 08:10:42
8d4c70f
"""
Hugging Face Spaces용 Flask μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ§„μž…μ 
"""
import sys
import os
import logging
from logging.handlers import RotatingFileHandler
# UTF-8 인코딩 κ°•μ œ μ„€μ •
if sys.platform == 'win32':
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
from app import create_app
app = create_app()
# Hugging Face Spaces ν™˜κ²½ λ³€μˆ˜ μ„€μ •
# SpacesλŠ” μžλ™μœΌλ‘œ 포트λ₯Ό ν• λ‹Ήν•˜λ―€λ‘œ ν™˜κ²½ λ³€μˆ˜μ—μ„œ κ°€μ Έμ˜΄
port = int(os.environ.get('PORT', 7860))
host = os.environ.get('HOST', '0.0.0.0')
# λ‘œκΉ… μ„€μ •
if not os.path.exists('logs'):
os.mkdir('logs')
# 파일 ν•Έλ“€λŸ¬ μ„€μ •
file_handler = RotatingFileHandler('logs/server.log', maxBytes=10240000, backupCount=10)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s %(levelname)s: %(message)s [in %(pathname)s:%(lineno)d]'
))
file_handler.setLevel(logging.INFO)
# μ½˜μ†” ν•Έλ“€λŸ¬ μ„€μ •
console_handler = logging.StreamHandler(sys.stdout)
console_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
))
console_handler.setLevel(logging.INFO)
# Flask μ•± 둜거 μ„€μ •
app.logger.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
app.logger.addHandler(console_handler)
# 루트 둜거 μ„€μ •
root_logger = logging.getLogger()
root_logger.setLevel(logging.INFO)
root_logger.addHandler(console_handler)
# Werkzeug 둜거 μ„€μ •
werkzeug_logger = logging.getLogger('werkzeug')
werkzeug_logger.setLevel(logging.INFO)
werkzeug_logger.handlers.clear()
werkzeug_handler = logging.StreamHandler(sys.stdout)
werkzeug_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(levelname)s - %(message)s'
))
werkzeug_logger.addHandler(werkzeug_handler)
# ν™˜κ²½ λ³€μˆ˜ 확인 (λ””λ²„κΉ…μš©)
app.logger.info('=' * 80)
app.logger.info('ν™˜κ²½ λ³€μˆ˜ 확인:')
app.logger.info(f' PORT: {port}')
app.logger.info(f' HOST: {host}')
app.logger.info(f' SECRET_KEY: {"섀정됨" if os.environ.get("SECRET_KEY") else "⚠️ μ„€μ •λ˜μ§€ μ•ŠμŒ"}')
app.logger.info(f' DATABASE_URL: {"섀정됨" if os.environ.get("DATABASE_URL") else "⚠️ μ„€μ •λ˜μ§€ μ•ŠμŒ"}')
app.logger.info(f' GEMINI_API_KEY: {"섀정됨" if os.environ.get("GEMINI_API_KEY") else "μ„€μ •λ˜μ§€ μ•ŠμŒ"}')
app.logger.info(f' OLLAMA_BASE_URL: {os.environ.get("OLLAMA_BASE_URL", "http://localhost:11434")}')
app.logger.info('=' * 80)
app.logger.info(f'μ„œλ²„ μ‹œμž‘ - Host: {host}, Port: {port}')
if __name__ == '__main__':
try:
print(f"[{__name__}] μ„œλ²„ μ‹œμž‘: http://{host}:{port}")
print(f"[{__name__}] λ‘œκ·ΈλŠ” μ½˜μ†”κ³Ό logs/server.log νŒŒμΌμ— κΈ°λ‘λ©λ‹ˆλ‹€.")
# ν™˜κ²½ λ³€μˆ˜ 확인 좜λ ₯
print("=" * 80)
print("ν™˜κ²½ λ³€μˆ˜ 확인:")
print(f" PORT: {port}")
print(f" HOST: {host}")
print(f" SECRET_KEY: {'섀정됨' if os.environ.get('SECRET_KEY') else '⚠️ μ„€μ •λ˜μ§€ μ•ŠμŒ'}")
print(f" DATABASE_URL: {'섀정됨' if os.environ.get('DATABASE_URL') else '⚠️ μ„€μ •λ˜μ§€ μ•ŠμŒ'}")
print(f" GEMINI_API_KEY: {'섀정됨' if os.environ.get('GEMINI_API_KEY') else 'μ„€μ •λ˜μ§€ μ•ŠμŒ'}")
print(f" OLLAMA_BASE_URL: {os.environ.get('OLLAMA_BASE_URL', 'http://localhost:11434')}")
print("=" * 80)
app.run(host=host, port=port, debug=False, use_reloader=False)
except Exception as e:
print(f"μ„œλ²„ μ‹œμž‘ 였λ₯˜: {e}")
import traceback
traceback.print_exc()
# Hugging Face Spaceμ—μ„œ μ—λŸ¬κ°€ 보이도둝 sys.exit μ‚¬μš©
sys.exit(1)