将站点部署到 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

Angular 2 应用程序部署到 Azure 时出现错误 404

Web 部署任务失败。已超出此站点的最大连接数。天蓝色