gpt4 book ai didi

python - 静态文件 application_readable 用法

转载 作者:太空狗 更新时间:2023-10-29 20:11:15 24 4
gpt4 key购买 nike

我一直在尝试了解 application_readable 静态 url 处理程序字段的工作原理。我使用的是 SDK 版本 1.7.7,我已经在我的开发环境中的应用程序上将其设置为 true,但我似乎无法真正读取文件:

# app.yaml

- url: /test
static_dir: application/static/test
application_readable: true

# app.py

path = os.path.join(os.path.split(__file__)[0], 'static/test/test.png')
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = '/application/static/test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = 'application/static/test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = '/static/test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = 'static/test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = '/test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = 'test/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = '/test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))
self.response.out.write("\n")
path = 'test.png'
self.response.out.write('Looking for %s...' % path)
self.response.out.write(os.path.exists(path))

但这些都不起作用:

Looking for /vagrant/test/application/static/test/test.png...False
Looking for /application/static/test/test.png...False
Looking for application/static/test/test.png...False
Looking for /static/test/test.png...False
Looking for static/test/test.png...False
Looking for /test/test.png...False
Looking for test/test.png...False
Looking for /test.png...False
Looking for test.png...False

虽然文件确实存在:

vagrant@precise64:/vagrant/kissyface$ ls -l /vagrant/test/application/static/test/test.png
-rwxrwxrwx 1 vagrant vagrant 9920 May 3 18:13 /vagrant/test/application/static/test/test.png

谁能告诉我我做错了什么?除了 statis url 处理程序文档中的简要描述和 appengine sdk 1.7.6 变更日志中的提及之外,我找不到任何文档或示例代码。是否有提供对这些文件的访问的实用程序类,或者我是否完全误解了 application_readable 实际应该做什么?

最佳答案

概览

要推断究竟在您的系统上发生了什么有点困难,但我可以告诉您什么在我的系统上起作用。我们可以整天猜测什么可能是错的,但是实现有效的东西并向后工作通常比猜测更有成效;它可以是任何东西。

如果让我猜的话,我会说问题是:

  1. 处理程序顺序不正确
  2. 搞砸了 python 路径
  3. 搞砸了 python 版本
  4. 使用简陋的旧 SDK
  5. 内裤侏儒

如果您不是猜测,而是实现了我在下面概述的项目,那么向后推理并找出它不适合您的原因应该非常简单。如果这个项目不起作用,那么您还有一些工作要做。这个问题真的很糟糕(我不想帮你解决)。如果它确实有效,那么您很幸运,因为您只需 5 或 10 分钟就能让您的其余代码也正常工作!

使用来自 http://code.google.com/p/googleappengine/downloads/list 的最新 python appengine SDK :

google_appengine_1.8.0.zip
71b5f3ee06dce0a7d6af32d65ae27272eac038cb

项目文件及其内容:

目录设置:

.
├── app.py
├── app.pyc
├── app.yaml
└── static
└── hi.txt

应用程序.py:

import webapp2
import os

class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!\n\n')

path = os.path.join(os.path.split(__file__)[0], 'static/hi.txt')
self.response.out.write(open(path).readlines()[0])

application = webapp2.WSGIApplication([('/.*', MainPage)])

app.pyc 是此文件的(自动)编译版本。

应用程序.yaml:

application: myapp
version: 1
runtime: python27
api_version: 1
threadsafe: yes

handlers:
- url: /static
static_dir: static
application_readable: true
- url: /.*
script: app.application

静态/hi.txt:

Ezra can see this text fine; I'm not sure why you can't... Hi!

发生了什么:

从项目根目录启动网络服务器:

 dev_appserver.py --port 80 .

您可能必须使用不同的端口号;没什么大不了的。只需调整您选择的说明即可。

在浏览器中访问http://localhost/:

HTTP响应:

INFO     2013-05-14 09:45:57,372 server.py:585] default: "GET / HTTP/1.1" 200 85

浏览器输出:

Hello, webapp World!

Ezra can see this text fine; I'm not sure why you can't... Hi!

在浏览器中访问http://localhost/static/hi.txt:

HTTP响应:

INFO     2013-05-14 09:48:42,785 server.py:585] default: "GET /static/hi.txt HTTP/1.1" 200 63

浏览器输出:

Ezra can see this text fine; I'm not sure why you can't... Hi!

打破它:

如果我从 app.yaml 中删除 application_readable: true 行:

在浏览器中访问http://localhost/:

HTTP 响应:

ERROR    2013-05-14 09:51:13,290 webapp2.py:1528] [Errno 13] file not accessible: '.../static/hi.txt'

浏览器输出:

500 Internal Server Error

The server has either erred or is incapable of performing the requested operation.

下一步做什么:

希望你能从这个例子开始逆向工作。如果它对你不起作用,你就完蛋了。享受一个阳光明媚的 5 月中旬下午,在路径中拖网并尝试(重新/卸载)安装东西以使这该死的事情继续进行。顶部的列表是我尝试的列表,不知道任何细节并排除了编程错误。祝你好运!

关于python - 静态文件 application_readable 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16531982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com