将站点部署到 Azure 时出现“OperationalError:数据库已锁定”
Posted
技术标签:
【中文标题】将站点部署到 Azure 时出现“OperationalError:数据库已锁定”【英文标题】:"OperationalError: database is locked" when deploying site to Azure 【发布时间】:2019-10-29 04:17:33 【问题描述】:我已经建立了一个 django 网站,其中一部分是 Microsoft 身份验证链接。 当我将网站上传到天蓝色云并单击“登录”链接时,我收到以下错误:
OperationalError at /login
database is locked
Request Method: GET
Request URL: http://bhkshield.azurewebsites.net/login
Django Version: 2.2.2
Exception Type: OperationalError
Exception Value:
database is locked
Exception Location: /home/site/wwwroot/antenv3.6/lib/python3.6/site-packages/django/db/backends/base/base.py in _commit, line 240
Python Executable: /usr/local/bin/python
Python Version: 3.6.7
Python Path:
['/usr/local/bin',
'/home/site/wwwroot',
'/home/site/wwwroot/antenv3.6/lib/python3.6/site-packages',
'/usr/local/lib/python36.zip',
'/usr/local/lib/python3.6',
'/usr/local/lib/python3.6/lib-dynload',
'/usr/local/lib/python3.6/site-packages']
Server time: Fri, 14 Jun 2019 13:19:22 +0000
我正在使用 sqlite3(setting.py 代码段):
DATABASES =
'default':
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
我不明白为什么会出现此错误,因为我没有向数据库插入或提交任何内容。 我的网站仅包含一个具有登录链接的页面(4 个视图:主页、上下文初始化、登录和回调)。而已。 顺便提一下,当我在本地运行该站点时,一切正常。它仅在部署后停止工作。 另一个奇怪的事情是,我之前曾在 azure 上将类似的内容上传到另一个站点,并且登录成功。由于某种原因,它现在不起作用,我不知道为什么...... 有没有人遇到过这种类型的错误并可以提供帮助? 如果您需要我提供更多文件的内容,请告诉我哪些文件,我会提供。
【问题讨论】:
【参考方案1】:这似乎是这个问题的重复:OperationalError: database is locked。
来自 Django 的文档: https://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption
SQLite 是一个轻量级数据库,因此不能支持 高并发。 OperationalError:数据库被锁定错误 表明您的应用程序正在经历比 sqlite 可以在默认配置中处理。这个错误意味着一个 线程或进程对数据库连接具有排他锁,并且 另一个线程在等待释放锁时超时。
Python 的 SQLite 包装器有一个默认的超时值,它决定 允许第二个线程在它之前等待锁多长时间 超时并引发 OperationalError: database is locked 错误。
如果您遇到此错误,您可以通过以下方式解决:
切换到另一个数据库后端。在某个时候 SQLite 对于现实世界的应用来说变得太“精简”了,而这些 并发错误表明您已达到该点。
重写代码以减少并发并确保数据库 交易是短暂的。
通过设置超时数据库来增加默认超时值 选项
我也一直在开发 Django Web 应用程序,我选择了 Azure SQL Server 作为应用程序的数据库。一切正常。
【讨论】:
谢谢!我已将其更改为 Azure SQL,并且可以正常工作。如果其他人也这样做,请记住在 settings.py 中输入'driver': 'ODBC Driver 17 for SQL Server'
而不是像微软在连接字符串中所说的 'driver': 'ODBC Driver 13 for SQL Server'
。
@baby_bunny_x3 你做得怎么样。我也面临同样的问题以上是关于将站点部署到 Azure 时出现“OperationalError:数据库已锁定”的主要内容,如果未能解决你的问题,请参考以下文章
使用 Capistrano 将 Ruby on Rails 应用程序部署到 Windows Azure VM 时出现超时错误
错误:使用 Next.js 应用程序部署到 Azure 时出现“需要域选项”
将 ASP.NET 应用程序部署到 Azure Web 应用程序时出现 HTTP 403 错误
将 ASP.NET 应用程序部署到 Azure Web 应用程序时出现 HTTP 500.79 错误/System.UriFormatException