我在Google App Engine上部署的Django应用程序遇到了一些麻烦。
我仍然不知道如何复制问题。
该应用程序似乎随机冻结。它只是停止响应(在此同时不生成日志),如果我进入任何应用程序页面,都会收到此错误:
错误:服务器错误
服务器遇到错误,无法完成您的请求。
请在30秒内重试。
日志中未显示任何错误,我发现的唯一奇怪的警告是该警告:
OpenBLAS警告-假定为256k,无法确定此系统上的L2缓存大小
在Ubuntu计算机上运行应用程序时没有任何问题。
我正在将Django 2.1.5与Python 3.7结合使用,并且Django连接到MySQL实例(在Google Cloud SQL上)。
其他信息:
app.yaml 文件非常基础,直接取自official example:
# [START django_app]
runtime: python37
service: backend
handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
static_dir: static/
# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
script: auto
# [END django_app]
Django配置摘录:
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework_filters',
'django_rest_passwordreset',
'django_filters',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
'DEFAULT_FILTER_BACKENDS': [
'rest_framework_filters.backends.RestFrameworkFilterBackend',
'django_filters.rest_framework.DjangoFilterBackend',
],
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'REFRESH_TOKEN_LIFETIME': timedelta(hours=10),
'ROTATE_REFRESH_TOKENS': True,
'ALGORITHM': 'HS256',
'SIGNING_KEY': "XXXXXX",
}
值得注意的是,有一些自定义安装的应用程序既可以使用常规的Django ORM来访问MySQL数据库,也可以使用 pymysql 库直接查询许多不同的数据库。