【问题标题】:client_secrets.json file unreadable once deployed to GAE部署到 GAE 后,client_secrets.json 文件无法读取
【发布时间】:2013-05-29 19:21:44
【问题描述】:

我有一个可以在我的机器上使用dev_appserver.py 的应用程序。我部署成功:

ronj@l:~$ appcfg.py update myapp/
03:03 PM Host: appengine.google.com
03:03 PM Application: myapp; version: 1
...
03:03 PM Completed update of app: myapp, version: 1

我的应用使用 Google API,因此此部署包含一个 client_secrets.json 文件,该文件位于我的项目文件夹的根目录中。它似乎已正确部署,因为我在重新下载我的应用程序时得到了它(使用appcfg.py download_app -A myapp -V 1 ~/myapp)。

但是,当打开一个调用需要访问client_secrets.json 的脚本的页面时,我得到一个Error: Server Error,这是实例日志显示的内容(myapp 和 MYID 被审查):

Traceback (most recent call last):
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/python27_runtime/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 255, in _LoadHandler
    handler = __import__(path[0])
  File "/base/data/home/apps/s~myapp/1.MYID/myapp.py", line 42, in <module>
    YOUTUBE_READ_WRITE_SCOPE)
  File "/base/data/home/apps/s~myapp/1.MYID/oauth2client/util.py", line 128, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/base/data/home/apps/s~myapp/1.MYID/oauth2client/appengine.py", line 854, in __init__
    client_type, client_info = clientsecrets.loadfile(filename, cache=cache)
  File "/base/data/home/apps/s~myapp/1.MYID/oauth2client/clientsecrets.py", line 145, in loadfile
    return _loadfile(filename)
  File "/base/data/home/apps/s~myapp/1.MYID/oauth2client/clientsecrets.py", line 107, in _loadfile
    raise InvalidClientSecretsError('File not found: "%s"' % filename)
InvalidClientSecretsError: File not found: "/base/data/home/apps/s~myapp/1.MYID/client_secrets.json"

这里是myapp.py第 41 和 42 行

decorator = OAuth2DecoratorFromClientSecrets(CLIENT_SECRETS,
    YOUTUBE_READ_WRITE_SCOPE)

这里是CLIENT_SECRETS

CLIENT_SECRETS = os.path.join(os.path.dirname(__file__), 'client_secrets.json')

我做错了什么?

编辑:#appengine 上的 murph 提到这可能来自不正确的 app.yaml 配置,我应该“确保它不在 app.yaml 中作为静态文件提供,并确保您自己的任何代码都不会决定为它提供服务”,但即使在删除该文件的所有静态处理程序之后,问题仍然存在。这是pastebin to my app.yaml。谈到这个,我注意到如果我离开 client_secrets.json 并部署,我会看到 “克隆 6 个静态文件”。然后,如果我删除它并重新部署,我会看到 “正在克隆 5 个静态文件”。这是否确认我的app.yaml 中仍有与client_secrets.json 匹配的内容,还是这些单独的机制?

【问题讨论】:

  • 秘密就在你的根里;你试过了吗:decorator = OAuth2DecoratorFromClientSecrets('client_secrets.json', YOUTUBE_READ_WRITE_SCOPE)
  • @voscausa 是的,我做到了,同样的错误:-/。请注意,我刚刚在原始帖子的末尾进行了编辑,这会给您带来其他想法吗?谢谢!

标签: python google-app-engine google-api google-api-python-client


【解决方案1】:

是的,“js”匹配

- url: /(.*\.(gif|png|jpg|css|js|ico))
  static_files: \1
  upload: (.*\.(gif|png|jpg|css|js|ico))

试试这个

- url: /(.*\.(gif|png|jpg|css|js|ico)$)
  static_files: \1
  upload: (.*\.(gif|png|jpg|css|js|ico)$)

【讨论】:

  • 是的!你今天赢得了我的(尘土飞扬的)正则表达式帽子 :),谢谢!
  • 通常,您应该尝试将静态资产与您想从文件系统访问的代码/内容分开。这样你就不会与静态资源的正则表达式发生奇怪的冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多