docker Devappserver:在没有活动安全票证的情况下尝试RPC调用

kwvwclae  于 2023-04-05  发布在  Docker
关注(0)|答案(2)|浏览(101)

我们正在从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中创建一个单独的容器,以使用数据存储模拟器
4szc88ey

4szc88ey1#

根据Google的说法,devappserver不支持python3。
从上面,我假设你在Windows上运行。如果是这样,我们有一个patch,当你在本地环境中运行dev_appserver.py时,它会将Gunicorn(因为默认情况下它不能在Windows上工作,而dev_appserver.py使用它)替换为Waitress(请参阅Google Cloud Community上的这篇文章)
然后,您可以在本地运行您的应用程序,而无需使用docker容器,并且它可以与捆绑的API一起工作。

s8vozzvw

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解释器。

dev_appserver.py --runtime_python_path="python27=/usr/bin/python2.7,python3=/usr/bin/python3" [PATH_TO_YOUR_APP]

相关问题