我正在运行基于烧瓶的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
日期非空,
PRIMARY KEY(id
),
KEY user_id
(user_id
,current_date
)
)ENGINE = InnoDB AUTO_INCREMENT = 19592 DEFAULT CHARSET = utf8
我们使用上表来检查有多少用户获得了多少邮件。每个用户一天最多可以获得2封邮件。
2周后,我遇到了一个问题,即“邮件已发送”'列正在变为0.我们正在使用SQL炼金术来完成所有工作。我尝试了很多调试,但一切似乎都运行良好。我在当地试过似乎工作正常。我认为这可能是一些问题所以我重新启动了这个问题。
捕捉: 当我重新启动服务器时,一切似乎在那天工作正常,我不再在该列中获得0。
为了跟踪它,我检查了2个小时以满足。我以为问题已经解决并重新入睡。再次在早上我再次检查它再次回到0.我开始担心,并再次开始调试,但事情似乎在本地。我再次重新启动服务器,然后事情开始正常。我不知道为什么重新启动服务器后它工作正常。在crontab中我推迟了重启服务器的工作。
我们正在使用python datetime
。
当我们去生产终端并尝试运行相同的代码而不重新启动服务器时它工作正常。我不知道网络服务有什么问题。
任何帮助或见解都有助于调试问题。
代码:
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