我们正在从webapp 2迁移到最新版本的Django。在我们转向最新技术之前,我们希望现在继续使用Appengine NDB等遗留服务。
为了在本地运行开发环境,我在docker环境中使用devappserver,因为根据Google的说法,devappserver不支持python3。
**我的Docker容器中的Google Cloud SDK版本是:424.0.0
服务器运行,但每当我尝试访问使用某种遗留服务的视图时,都会收到此错误:google.appengine.runtime.apiproxy_errors.RPCFailedError: Attempted RPC call without active security ticket
错误日志:x1c 0d1x
app.yaml(用于部署)如下所示:
runtime: python38
instance_class: F2
app_engine_apis: 'True'
entrypoint: bash -c 'python3 manage.py migrate --settings=conf.settings.dev --noinput && gunicorn -b :$PORT main:app'
handlers:
- url: /static
static_dir: static/
- url: /.*
script: auto
secure: always
redirect_http_response_code: 301
builtins:
- deferred: on
env_variables:
DEBUG: 'False'
DB_HOST:
DB_PORT:
DB_NAME:
DB_USER:
DB_PASSWORD:
DJANGO_SETTINGS_MODULE: conf.settings.dev
main.py:
from conf.wsgi import application
from google.appengine.api import wrap_wsgi_app
app = wrap_wsgi_app(application, use_legacy_context_mode=True, use_deferred=False)
django应用程序在部署到AppEngine标准环境时可以正常工作。在本地运行docker容器内的服务时没有错误。
我用于应用引擎捆绑的遗留服务的包:传统捆绑服务
示例视图:
from django.views import View
from django.http import JsonResponse
from google.appengine.api import memcache
class UserView(View):
def get(self, request):
memcache.set("Globe", "Jupiter")
return JsonResponse({'hello': memcache.get("Globe")})
我尝试了这些方法,但未能解决错误:
- 尝试创建appengine_config.py文件,但显然不起作用
- 创建了一个中间件来使用AppEngine NDB,使用这个中间件作为基础(不得不更新它,因为最新的django不使用MIDDLEWARE_CLASSES):google.appengine.ext.ndb.django_middleware.ndbDjangoMiddleware
- 使用gcloud auth activate-service-account --key-file=/app/conf/gcp_credentials.json并设置项目ID执行身份验证
- 配置此env:谷歌_云_项目
- 尝试使用旧的google cloud SDK(即183.0.0)在docker中创建一个单独的容器,以使用数据存储模拟器
2条答案
按热度按时间4szc88ey1#
根据Google的说法,devappserver不支持python3。
从上面,我假设你在Windows上运行。如果是这样,我们有一个patch,当你在本地环境中运行
dev_appserver.py
时,它会将Gunicorn(因为默认情况下它不能在Windows上工作,而dev_appserver.py使用它)替换为Waitress(请参阅Google Cloud Community上的这篇文章)然后,您可以在本地运行您的应用程序,而无需使用docker容器,并且它可以与捆绑的API一起工作。
s8vozzvw2#
如公开文档中所述,您应该拥有
2.7.12
或更高版本的Python 2
解释器,无论您的应用中使用何种语言来运行dev_appserver
工具。**重要提示:**要运行dev_appserver.py工具,您的机器上必须安装2.7.12或更高版本的Python 2解释器(即使您的应用是用其他语言或版本编写的,包括Python 3)。
dev_appserver工具不支持在Windows上开发Python 3应用程序。
您必须运行以下命令以确保使用
Python 2
解释器。