标签: google-app-engine-python

Google App Engine从父文件夹导入库

所以我的目录结构看起来像这样:

\Project-Dir\
|- lib\
|  |- flask\
|  |- ...
|- module1_dir\
|  |- __init__.py
|  |- app.yaml
|  |- app.py
|  |- ...
|- module2_dir\
|  |- __init__.py
|  |- app.yaml
|  |- app.py
|  |- ...
|- ...
Run Code Online (Sandbox Code Playgroud)

app.py

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
Run Code Online (Sandbox Code Playgroud)

我在同一个根目录下有两个模块.它们一起部署到App Engine.他们也共享相同的库.这些库都非常强大,所以我试图将它们放在共享目录(lib)中.

我正在dev_appserver.py\Project-Dir\和传球两个.yamls.我sys.path的设置很好,包括lib\目录.然而沙盒似乎固执地坚持认为图书馆lib\ 不存在.

我确定我只是遗漏了一些像配置改变一样的东西.或者App Engine真的只是不支持这样的设置?

编辑:当我在外面运行它时,导入工作正常dev_appserver.py.

google-app-engine python-import google-app-engine-python

6
推荐指数
1
解决办法
550
查看次数

从GAE请求时从make_fetch_call中删除标头(用户代理)

我有一个谷歌应用引擎(GAE)的应用程序,我使用的是Python 2.7.此应用程序从用户门户(例如Chrome)接收GET(ajax)请求.收到请求后,我准备异步连接,使用urlfetch.make_fetch_call() - GET请求从GAE外部的多个网站(比如X1,X2等)请求数据.

这适用于X1网站,但不适用于X2.开始在本地开发服务器上进行探测.在探究时我怀疑X2正在检查标题中的{'User-Agent':'Python-urllib/2.7'}标记.这是我最好的猜测,因为将此字段更改为{'User-Agent':'Mozilla/5.0'}会返回所需的结果.

所以我将代码上传到GAE并使用urlfetch.make_fetch_call()启动了该过程.在拦截此调用后,我发现无论我做什么,GAE添加的默认标头都不会被删除. 这是GAE添加的默认标题.

302 218ms 0kb Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/48.0.2564.103 Safari/537.36 AppEngine-Google; (+ http://code.google.com/appengine ; appid:s~xxx-etching-112014)module = default version = 1 107.178.194.96 - [06/Feb/2016:19:57:04 -0800] "GET/HTTP/1.1"302 383" http://www.mywebbsite.com/ ""Mozilla/5.0(Windows NT 6.1; WOW64)AppleWebKit/537.36(KHTML,与Gecko一样)Chrome/48.0.2564.103 Safari/537.36 AppEngine -Google;(+ http://code.google.com/appengine ; appid:s~xxx-etching-112014)""1.usedForIntercepting.appspot.com"ms = 218 cpu_ms = 224 cpm_usd = 0.000043 loading_request = 1 app_engine_release = 1.9.32 trace_id = fd7b7420e7f8c23371a5b0ea7e9651 instance = 00c61b117ce5ebac2a2eba44f26a01d4f2

这就是我尝试过的

for portal in self.searchPortals:
        spoofHeader = {
                       'User-agent':'Mozilla/5.0----------------------',
                       'Host':portal.getURL(),
                       'Accept-Encoding': 'identity',
                       'Connection': 'close',
                       'Accept': 'application/json, …
Run Code Online (Sandbox Code Playgroud)

google-app-engine http-headers urlfetch google-app-engine-python

6
推荐指数
1
解决办法
490
查看次数

您如何对 Google Cloud NDB 代码进行单元测试?

将 Python 2 AppEngine 应用升级到新运行时的推荐路径是将数据存储区代码切换到 Google Cloud NDB。但是,我找不到任何关于使用 Cloud NDB 的单元测试代码(以前可以使用 Python 2 测试平台库)。

如何对 Cloud NDB 代码进行单元测试?(除了自己抽象 Cloud NDB 依赖项的标准)

python google-app-engine app-engine-ndb google-cloud-datastore google-app-engine-python

6
推荐指数
1
解决办法
340
查看次数

访问生产中的 Google App Engine Python 应用程序代码

(背景:我是 Google App Engine 的新手,熟悉其他云提供商的服务)

我正在寻找类似于对生产节点的 shell 访问的访问/视图。

使用基于 Python/Django 的 Google App Engine 应用程序,我想查看生产中的代码。

我能找到的一个视图是 StackDriver“调试”视图。但是,显然“调试”视图中显示的代码并不反映更新的生产代码(基于生产站点上显示的内容,例如主页上的文本不同)。

Google App Engine 是否允许我通过 ssh 进入运行应用程序/代码的虚拟机?如果没有,如何检查生产中运行的代码?

谢谢。

google-app-engine google-app-engine-python

5
推荐指数
1
解决办法
2023
查看次数

google.appengine.api.urlfetch 截止时间是否限制为 60 秒?

我在谷歌应用程序引擎上使用python,并不断接收google.appengine.api.urlfetch_errors.DeadlineExceededError从进行一些后端处理的机器发出的请求。这些请求大约需要 60 秒,有时会更长一些,因此我尝试延长截止日期。

请求被包装在重试中,从日志中我可以看到重试之间的时间始终约为 60 秒。我认为这要么是因为我配置不正确,要么误解了截止日期的限制。

机器配置为:

instance_class: B8
basic_scaling:
  max_instances: 1
  idle_timeout: 10m
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是(为简单起见进行了编辑):

from google.appengine.api import urlfetch
from retrying import retry

timeout = 600
retries = 10

@retry(
    stop_max_attempt_number=retries,
    wait_exponential_multiplier=1000,
    wait_exponential_max=1000*60*5
)
def fetch(url):
    """Fetch remote data, retrying as necessary"""
    urlfetch.set_default_fetch_deadline(timeout)
    result = urlfetch.fetch(url)
    if result.status_code != 200:
        raise IOError("Did not receive OK response from server")
    return result.content

data = fetch(config['url'])
Run Code Online (Sandbox Code Playgroud)

我尝试过明确设置截止日期,urlfetch.fetch(url, deadline=timeout)但设置默认值似乎是大多数人建议的方法。

谁能澄清是否可以设置最大值deadline

python google-app-engine google-app-engine-python

5
推荐指数
1
解决办法
1133
查看次数

如何为谷歌应用引擎打包python3模块

我试图弄清楚如何使用 Python 3(标准)将内部包添加到 Google App Engine 部署中。

对于 Python 2,打包模块的方法是使用本地lib/文件夹和appengine_config.py. 这似乎不再适用于 Python 3?至少我的应用程序找不到lib/文件夹中的模块。

对于 Python 3,可以只pip3 install -t .使用包。但这会变得非常混乱,因为所有软件包都刚刚安装在应用程序根目录中,并且还将添加到我们应用程序的 git 存储库中。

我们不能使用,requirements.txt因为该模块是内部的,并且在 PyPI 上不可用。

是否有另一种使用 Python 3 为 Google App Engine 打包模块的方法?

google-app-engine python-3.x google-cloud-platform google-app-engine-python

5
推荐指数
1
解决办法
377
查看次数

部署在 Google App Engine 上的应用程序的 /healthz 路由返回 404

/healthz对部署在 Google App Engine 上的应用程序上的路由的HTTP 请求似乎没有到达/healthz应用程序内的端点。
相反,提供了一个404页面,显然来自 GCP 基础设施。
我可以知道如何覆盖此行为并使这些请求到达我的应用程序吗?

谢谢你。

在此处输入图片说明.

多一点背景:

我正在Google App Engine 上部署一个Streamlit应用程序。
Streamlit Web UI 似乎/healthz定期向端点发送请求,当这些请求失败时,Streamlit 应用程序停止工作并显示如下错误消息。

在此处输入图片说明

google-app-engine google-cloud-platform google-app-engine-python app-engine-flexible streamlit

5
推荐指数
2
解决办法
518
查看次数

gcloud 应用程序部署失败:“云构建在 10m 内未成功”

我无法在Python标准环境上部署简单的Flask/MySQL应用程序;它超时了。

ERROR: (gcloud.app.deploy) Error Response: [4] Cloud build did not succeed within 10m.

在日志中它是这样说的:

Step #7 - "exporter": Layer 'google.python.appengine:config' SHA: sha256:c7053ac3e...
TIMEOUT
ERROR: context deadline exceeded
Run Code Online (Sandbox Code Playgroud)

这是 app.yaml(经过适当审查):

runtime: python37

instance_class: F2

handlers:
- url: /static
  static_dir: static
- url: /.*
  script: auto

env_variables:
  GAE_USE_SOCKETS_HTTPLIB: True
  DB_USER: XXXX
  DB_PASS: XXXX
  DB_NAME: XXXXXXXX
  CLOUD_SQL_CONNECTION_NAME:XXXXXXXXXXX:us-west3:XXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

这是要求.txt:

numpy==1.19.0
Flask==1.1.2
googleads>=24.0.0
SQLAlchemy==1.3.17
PyMySQL==0.9.3
google-search-results==1.8.3
Run Code Online (Sandbox Code Playgroud)

我尝试了各种各样的方法,但没有任何效果。这曾经运行没有问题;我们没有改变任何东西。它基本上是一个 Hello World Flask 应用程序。

google-app-engine google-cloud-platform gcloud google-app-engine-python

5
推荐指数
0
解决办法
2244
查看次数

`vendor.add` 不会向 dev_appserver.py 公开依赖项

将旧项目从 2.7 和 Ubuntu 18.04 [逐步、Python 3.10 和 22.04 next\xe2\x80\xa6 然后 Flask!] 从供应商依赖项迁移到requirements.txt. 从项目根目录中删除了依赖项并在我的requirements.txt.

\n

我的requirements.txtcontainsgoogle-cloud-storage==1.44.0和 wasvenv-2-7/bin/python -m pip install -t lib -r requirements.txt与 aappengine_config.py位于同一目录中app.yaml

\n
# From https://cloud.google.com/appengine/docs/legacy/standard/python/tools/using-libraries-python-27\nimport os\n\nfrom google.appengine.ext import vendor\n\nvendor.add(\'lib\')\nvendor.add(os.path.join(os.path.dirname(os.path.realpath(__file__)), \'lib\'))\n
Run Code Online (Sandbox Code Playgroud)\n

我该如何解决这个错误?- 尝试过,venv-2-7/bin/python -c \'import google.cloud.storage\'有效,但是:

\n
$ venv-2-7/bin/python /google-cloud-sdk/platform/google_appengine/dev_appserver.py --host 127.0.0.1 .\n
Run Code Online (Sandbox Code Playgroud)\n

[来自 PyCharm 和手动] 的错误:

\n
ImportError: No module named google.cloud.storage\n
Run Code Online (Sandbox Code Playgroud)\n

EDIT0:根据评论请求包含更多信息[如下]:

\n
app.yaml
\n
$ …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-app-engine-python google-cloud-python

5
推荐指数
1
解决办法
214
查看次数

Python - Google App Engine 部署期间超出内存限制

我正在创建一个 Python 项目并将其部署到 Google App Engine。

当我在另一个项目中使用部署的链接时,我在 Google Cloud Logging 中收到以下错误消息:

Exceeded hard memory limit of 256 MB with 667 MB after servicing 0 requests total. Consider setting a larger instance class in app.yaml.
Run Code Online (Sandbox Code Playgroud)

所以,我查看了这个这个链接,以下是要点:

  • 实例类 内存限制 CPU限制 支持的缩放类型
    F1(默认) 256MB 600兆赫 自动的
    F2 512MB 1.2GHz 自动的
    F4 1024MB 2.4GHz 自动的
    F4_1G 2048MB 2.4GHz 自动的
  • instance_class: F2

该错误表明限制为 256 MB,但记录了 667 MB。F1 的内存限制和 F2 的内存限制均小于 667 MB。所以我添加instance_class: F2app.yaml更改F2F4. …

python google-app-engine limit google-cloud-platform google-app-engine-python

5
推荐指数
1
解决办法
1705
查看次数