【问题标题】:NotImplementedError: Only tempfile.TemporaryFile is available for useNotImplementedError:只有 tempfile.TemporaryFile 可供使用
【发布时间】:2018-03-21 08:35:16
【问题描述】:

我正在使用 django 和 Google App Engine。我无法确定错误来自哪里,因为如果我在本地使用它,我的网站正在运行。在我将它部署到 GAE 后,它工作正常,但使用 googleadwords api 时出现此错误:

NotImplementedError: Only tempfile.TemporaryFile is available for use
at PlaceHolder (/base/alloc/tmpfs/dynamic_runtimes/python27/a7637d5531ec9deb_unzipped/python27_dist/lib/python2.7/tempfile.py:45)
at __init__ (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/suds/cache.py:115)
at __init__ (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/suds/client.py:112)
at GetService (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/googleads/adwords.py:459)
at post (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/ksvt/views.py:47)
at dispatch (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/django/views/generic/base.py:88)
at view (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/django/views/generic/base.py:68)
at _get_response (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/django/core/handlers/base.py:185)
at _get_response (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/django/core/handlers/base.py:187)
at inner (/base/data/home/apps/f~xxxx/20180320t181216.408435502723573470/lib/django/core/handlers/exception.py:41)

有人能解释一下这个错误是什么意思吗?谢谢!

编辑: 我认为会产生错误的代码行。

 adwords_client = adwords.AdWordsClient.LoadFromStorage(os.path.dirname(os.path.abspath(__file__)) + "//googleads.yaml")

【问题讨论】:

  • 非常相似,虽然老了stackoverflow.com/questions/3586134/…
  • @EduardGamonal 您好,先生,我已经尝试过了,但它不起作用。我还更新了我的问题并添加了我认为导致错误的代码行。

标签: python django google-app-engine google-ads-api


【解决方案1】:

adwords 库正在使用suds 将 SOAP 消息发送到 adwords API。 suds 包尝试在文件系统中缓存数据,这在 App Engine 标准环境中是被禁止的。

Adwords 包的 README 描述了如何通过将虚拟缓存实现传递给 adwords 客户端来禁用缓存:

adwords_client = adwords.AdWordsClient(
  developer_token, oauth2_client, user_agent,
  client_customer_id=client_customer_id, cache=suds.cache.NoCache())

(您需要导入suds.cache

【讨论】:

  • 你的男人!我不知道 GAE 中禁止缓存.. 非常感谢.. 我的网站现在在 GAE 中运行.. :)
猜你喜欢
  • 2011-04-04
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
  • 2020-02-13
  • 2017-11-03
  • 2012-02-27
  • 1970-01-01
  • 2016-09-13
相关资源
最近更新 更多