apache+Flask+mod_wsgiの環境でDBのセッションを切る方法を教えていただきたいです。
AWS EC2にapache+Flask+mod_wsgiで動作しているWebアプリケーションを作成しました。
ですが、DB(Mysql)の追加を行うと500エラーになります。
おそらくDBセッションが切れていないのが原因だと思われるのですが、
セッションを切るよう処理もいれていて、pythonコマンドから直接Flaskを実行するとしっかりと切れています。
登録等も問題なく行えます。
下記、エラーとコードになります。
ご助言いただけますと幸いです。
sqlalchemy.exc.InvalidRequestError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (raised as a result of Query-invoked autoflush; consider using a session.no_autoflush block if this flush is occurring prematurely) (pymysql.err.IntegrityError) (1452, 'Cannot add or update a child row: a foreign key constraint fails (`hakuran`.`article`, CONSTRAINT `article_ibfk_1` FOREIGN KEY (`type_id`) REFERENCES `article_type` (`name_id`))') [SQL: 'INSERT INTO article (slug, keyword, description, name, content, thumbnail, type_id, status_id, released_at, end_at, created_at, created_user_id, modified_at, modified_user_id) VALUES (%(slug)s, %(keyword)s, %(description)s, %(name)s, %(content)s, %(thumbnail)s, %(type_id)s, %(status_id)s, %(released_at)s, %(end_at)s, %(created_at)s, %(created_user_id)s, %(modified_at)s, %(modified_user_id)s)'] [parameters: {'slug': 'slug1', 'keyword': 'keyword', 'description': '\xe6\xa6\x82\xe8\xa6\x81', 'name': 'title', 'content': '[img]/static/upload/20170809/OAYTMM0-min_3.jpg[/img]', 'thumbnail': '/static/upload/20170809/image_3.png', 'type_id': 'blog', 'status_id': 1, 'released_at': '2017-08-08 16:00:00', 'end_at': None, 'created_at': '2017/08/09-15:47:41', 'created_user_id': 1, 'modified_at': '2017/08/09-15:47:41', 'modified_user_id': 1}]
#!/usr/bin/env python from flask import Flask, render_template, request, session from settings.routes import default from settings import plugins from settings import config from flask_wtf.csrf import CSRFProtect import numpy as np import importlib from flask.ext.sqlalchemy import SQLAlchemy # import settings.routing as Routing app = Flask(__name__) app.config.from_object(config.Master) db = SQLAlchemy(app) CSRFProtect(app) # デフォルトのルーティングを読み込み app.register_blueprint(default.app) # 使用する機能をimport for plugin in plugins.LIST: module = importlib.import_module(plugin) app.register_blueprint(module.app) @app.after_request def close_session(response): # DBのセッションをクローズ db.session.remove() # 元はこれで切っていました。 db.session.close() # こちらは苦し紛れに追加しましたが、効果なしでした。 return response # return render_template('index.html',path=path) # ここがサーバサイドからクライアントサイドへ何かを渡す時のポイントになります if __name__ == "__main__": # Webサーバ立ち上げ # db.init_app(app) app.run(debug=True)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。