我正在运行基于烧瓶的 Web 服务并使用 python。
配置:Python - 2.7.3 MySQL - 5.5.31 Linux - 12.04.2
我们已集成仅向特定用户发送邮件 2 次,并且我们将条目存储在特定表中。
CREATE TABLE user_communication_stats
(
id
int(11) NOT NULL AUTO_INCREMENT,
user_id
bigint(20) NOT NULL,
mails_received
tinyint(2) DEFAULT '1',
current_date
date NOT NULL, PRIMARY KEY ( id
), KEY user_id
( user_id
, current_date
)) ENGINE=InnoDB AUTO_INCREMENT=19592 DEFAULT CHARSET= utf8
我们使用上表来检查有多少用户收到了多少邮件。每个用户一天最多可以收到 2 封邮件。
2 周前,我遇到了“mails_received”列为 0 的问题。我们正在使用 SQL 炼金术来做所有事情。我尝试了很多调试,但一切似乎都很好。我在本地尝试过似乎工作正常。我认为这可能是一些问题,所以我重新启动了这个问题。
抓住: 当我重新启动服务器时,那天一切似乎都运行良好,我在该列中不再得到 0。
为了跟踪它,我检查了 2 个小时才满意。我以为问题解决了,就回去睡觉了。早上我再次检查它再次回到0。我开始担心并再次开始调试,但事情似乎在本地。我再次重新启动服务器,一切又开始正常工作。我不知道为什么在重新启动服务器后它工作正常。在 crontab 我把工作重新启动服务器。
我们datetime
为此使用python。
当我们进入生产终端并尝试在不重新启动服务器的情况下运行相同的代码时,它工作正常。我不知道网络服务有什么问题。
任何帮助或见解都有助于调试问题。
代码:
def addRecord(user_id):
try:
if recordExists(user_id):
logging.info(" Entry for the user %s already exists. " % (user_id))
return True
# otherwise create an entry
rowObj = UserCommunicationSettingsDTO.empty()
rowObj.user_id = user_id
if BaseDAO.add(rowObj):
logging.info("Entry %s successfully created" % (user_id))
return True
logging.error("Entry for the user %s could not be created. " % (user_id))
return False
except Exception as error:
logging.error("An entry into the table could not be made." + str(error))
return False
def updateRecord(user_id, options):
try:
# update record with current date
if 'updated_date' not in options:
options['updated_date'] = datetime.today().date()
db_session = get_session()
db_session. \
query(UserCommunicationSettingsDTO). \
filter(UserCommunicationSettingsDTO.user_id == user_id).update(options)
db_session.commit()
return True
except Exception as error:
logging.error(" Error updating the values for user %s with error -- %s " % (user_id, str(error)))
db_session.rollback()
logging.error(" Rolling back ")
return False
def recordExists(user_id):
try:
db_session = get_session()
record = db_session. \
query(UserCommunicationSettingsDTO). \
filter(UserCommunicationSettingsDTO.user_id == user_id).first()
db_session.close()
if record:
logging.info("Record already exists for user %s" % (user_id))
return record
else:
logging.info("Record doesn't exist for user %s" % (user_id))
return None
except Exception as error:
logging.error(" Error finding record for user %s . Error -- %s" % (user_id, str(error)))
return None