итак ... кому нравится детективная работа, льющаяся за запись журнала ???Вот один из тех, кто работает с нами!
Один из наших пользователей заявляет, что он обнаружил страницу с ошибкой во время викторины на нашем сайте.Ниже я прилагаю некоторый текст из журналов нашего сервера, относящихся к моменту, когда они сообщили.
Я думаю, что третий столбец (8 или 9) относится к потоку на сервере.Таким образом, в 07:36:31 пользователь готовит для него ответ в формате HTML через серию вызовов функций в ответ на запрос пользователя POST (отвечая на предыдущий вопрос викторины).
Но после второго POST от пользователя в 07:36:44 по какой-то причине сервер, по-видимому, создал два потока, работающих параллельно, в ответ на то, что я предполагаю, что это один запрос POST.
Вы можете увидеть ошибку в конце и ее причину.Для первого потока (8) запись была сохранена в базе данных.Когда второй поток достигает этой точки спустя миллисекунды, мы получаем ошибку целостности, потому что запись с этим ключом уже существует (благодаря потоку 8).
У меня никогда не было этой проблемы раньше.Любые идеи относительно ПОЧЕМУ вдруг наш сервер решил внезапно создать два потока, что привело к неожиданному состоянию гонки ??
Мой технологический стек: * Сервер Heroku * Веб-фреймворк Python Django
07:36:31 : 95.XX.67.113 https:POST status:200 "/en/main/"
..<snip>..
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.ask_quiz_question
07:36:31 : wrappers 9 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.get_next_scheduled_q
07:36:31 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.ask_quiz_question
07:36:44 : 95.XX.67.113 https:POST status:200 "/en/main/"
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.main.switchboard
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.main.switchboard
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.main.load_session_data
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.main.load_session_data
07:36:44 : user_profile 8 DEBUG : Model UserProfile Instance saved:[<User: Aysegul>]
07:36:44 : main 8 DEBUG : Aysegul switchboard - returning control back to run_quiz
07:36:44 : wrappers 8 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:44 : user_profile 9 DEBUG : Model UserProfile Instance saved:[<User: Aysegul>]
07:36:44 : main 9 DEBUG : Aysegul switchboard - returning control back to run_quiz
07:36:44 : wrappers 9 INFO : User Aysegul: starting grammar.views.assess.run_quiz
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.quiz_class.record_answer
07:36:44 : wrappers 9 INFO : User Aysegul: starting main.views.quiz_class.record_answer
07:36:44 : wrappers 8 INFO : User Aysegul: starting main.views.quiz_class.question_feedback
07:36:44 : log 9 ERROR : Internal Server Error: /en/main/
07:36:44 : Traceback (most recent call last):
07:36:44 : File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
07:36:44 : return self.cursor.execute(sql, params)
07:36:44 : psycopg2.IntegrityError: duplicate key value violates unique constraint "grammar_entry_question_id_text_d90c1
7cd_uniq"
07:36:44 : DETAIL: Key (question_id, text)=(1385, Üç günden beri hasta oluyor) already exists.
PS Интересно, что эта проблема также произошла с комбинацией heroku / django ... Один запрос Heroku порождает два ответа, которые приводят к сбою моего приложения