Spaces:
Running
Running
| from flask import Flask | |
| from flask_sqlalchemy import SQLAlchemy | |
| from flask_login import LoginManager | |
| import os | |
| db = SQLAlchemy() | |
| login_manager = LoginManager() | |
| login_manager.login_view = 'auth.login' | |
| def create_app(): | |
| app = Flask(__name__, static_folder='templates/static') | |
| # 1. ์ค์ | |
| app.config['SECRET_KEY'] = 'a-very-long-and-unique-secret-key-for-this-app' | |
| app.config['SESSION_COOKIE_SAMESITE'] = 'None' | |
| app.config['SESSION_COOKIE_SECURE'] = True | |
| db_uri = os.environ.get('DATABASE_URL') | |
| if not db_uri: | |
| db_uri = "sqlite:///emotion.db" | |
| if db_uri and db_uri.startswith("postgres://"): | |
| db_uri = db_uri.replace("postgres://", "postgresql://", 1) | |
| app.config['SQLALCHEMY_DATABASE_URI'] = db_uri | |
| app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False | |
| app.config['TEMPLATES_AUTO_RELOAD'] = True | |
| # SQLAlchemy ์์ง ์ต์ ์ค์ (pgbouncer Session ๋ชจ๋ ํธํ) | |
| app.config['SQLALCHEMY_ENGINE_OPTIONS'] = { | |
| "pool_size": 15, # pgbouncer์ pool_size์ ์ผ์น์ํค๊ฑฐ๋ ๋ ์๊ฒ ์ค์ | |
| "max_overflow": 5, # pool_size ์ด๊ณผ ์ ์์๋ก ์ด ์ ์๋ ์ฐ๊ฒฐ ์ | |
| "pool_recycle": 3600, # 1์๊ฐ๋ง๋ค ์ฐ๊ฒฐ ์ฌํ์ฉ (์ค๋๋ ์ฐ๊ฒฐ ๋ฐฉ์ง) | |
| "pool_pre_ping": True, # ์ฐ๊ฒฐ ์ฌ์ฉ ์ ์ ํจ์ฑ ๊ฒ์ฌ | |
| "pool_timeout": 30, # ์ฐ๊ฒฐ ํ์์ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๋ ์ต๋ ์๊ฐ (์ด) | |
| # pgbouncer Session ๋ชจ๋์์๋ 'rollback'์ด ๊ธฐ๋ณธ๊ฐ์ด๋ฏ๋ก ๋ช ์์ ์ผ๋ก ์ค์ ํ์ง ์์๋ ๋จ | |
| # "pool_reset_on_return": 'rollback' | |
| } | |
| # ๋ก๊น ์ค์ | |
| import logging | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| # 2. DB ์ด๊ธฐํ ๋ฐ ํ ์ด๋ธ ์์ฑ | |
| db.init_app(app) | |
| with app.app_context(): | |
| from . import models | |
| db.create_all() | |
| def shutdown_session(exception=None): | |
| db.session.remove() | |
| # 3. AI ๋ชจ๋ธ ๋ก๋ฉ | |
| from .emotion_engine import load_emotion_classifier | |
| # ์ฑ ์ปจํ ์คํธ ์์์ ๋ชจ๋ธ์ ๋ก๋ํ๊ณ app ๊ฐ์ฒด์ ์ ์ฅํฉ๋๋ค. | |
| with app.app_context(): | |
| app.emotion_classifier = load_emotion_classifier() | |
| # 5. ๋ธ๋ฃจํ๋ฆฐํธ ๋ฑ๋ก | |
| from . import main, auth | |
| app.register_blueprint(main.bp) | |
| app.register_blueprint(auth.bp) | |
| return app | |