Использование статических файлов application_readable

Я пытался понять, как работает поле обработчика application_readable static url. Я использую SDK версии 1.7.7, и я установил это значение true в приложении в моей среде dev, но я не могу, по-видимому, прочитать файл:

# 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 

Может ли кто-нибудь сказать мне, что я делаю неправильно? Я не смог найти документацию или пример кода для этого за пределами краткого описания в документах обработчика url statis и упоминания в appengine sdk 1.7.6 changelog. Есть ли класс утилиты, который обеспечивает доступ к этим файлам, или я полностью неправильно истолковал, что приложение application_readable действительно должно делать?

One Solution collect form web for “Использование статических файлов application_readable”

обзор

Трудно понять, что именно происходит в вашей системе, но я могу рассказать вам, что работает на моем. Мы можем размышлять весь день о том, что может быть неправильным, но реализация чего-то, что работает и работает в обратном направлении, обычно более продуктивна, чем угадывание; это может быть что угодно.

Если бы я догадался, я бы сказал, что проблема такова:

  1. Неверный порядок обработчиков
  2. Завернутые пути python
  3. Завернутые версии python
  4. Использование janky старого SDK
  5. Трусы гномы

Если вместо того, чтобы гадать, вы реализуете проект, который я изложил ниже, это должно быть довольно просто рассуждать назад и выяснить, почему он не работает для вас. Если этот проект не работает, у вас есть некоторая работа. Проблема действительно противная (и я не хочу помочь вам ее исправить). Если это сработает, вам повезло, так как вы в 5 или 10 минутах езды от остальной части вашего кода!

Используя последнюю версию SDK appengine для python с http://code.google.com/p/googleappengine/downloads/list :

 google_appengine_1.8.0.zip 71b5f3ee06dce0a7d6af32d65ae27272eac038cb 

Файлы проекта и их содержимое:

Настройка каталога:

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

app.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 – это (автоматически) скомпилированная версия этого файла.

app.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 

Выход из браузера:

Привет, мир webapp!

Эзра прекрасно видит этот текст; Я не уверен, почему ты не можешь … Привет!

Посещение 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 

Выход из браузера:

Эзра прекрасно видит этот текст; Я не уверен, почему ты не можешь … Привет!

Разрыв:

Если я удалю строку application_readable: true из app.yaml:

Посещение http://localhost/ в браузере:

Http-ответ:

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

Выход из браузера:

500 – внутренняя ошибка сервера

Сервер либо ошибочен, либо не способен выполнить запрошенную операцию.

Что делать дальше:

Надеюсь, вы сможете работать в обратном направлении из этого примера. Если это не сработает для вас, вы обречены. Наслаждайтесь проведением солнечного полудня в середине мая, пройдя через тропинки и пытаясь (повторно / un) установить вещи, чтобы добиться этого. Список вверху – это список, который я бы попробовал, не зная какой-либо специфики и исключив ошибку программирования. Удачи!

  • Почему syncdb manage.py не удается подключиться к базе данных Google Cloud sql?
  • db.ReferenceProperty () vs ndb.KeyProperty в приложении Engine
  • Как проверить дубликаты данных в моем хранилище данных и отобразить ошибку?
  • Модуль google_auth_httplib2 не найден после того, как pip установил google-cloud. Как я могу его исправить?
  • Что такое хорошее свойство db, для массива ключей для python с App Engine?
  • Модуль Appengine: Маршрутизация с диспетчером.ямл не работает
  • Django в Google AppEngine с CloudSQL: как подключиться к базе данных (ошибка 2002, не удается подключиться к локальному серверу MySQL ..)
  • Google App Engine PHP внезапно прекратил работу приложений локально
  • Python - лучший язык программирования в мире.