emotion-chatbot-app / src /__init__.py
hfexample's picture
Deploy clean snapshot of the repository
e221c83
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()
@app.teardown_appcontext
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