Использование статических файлов 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) установить вещи, чтобы добиться этого. Список вверху – это список, который я бы попробовал, не зная какой-либо специфики и исключив ошибку программирования. Удачи!

Interesting Posts

документация pandas resample

Не удается получить библиотеку изображений Python для поиска JPEG-поддержки

Как лучше всего выполнять многопроцессорство в запросах с сервером Porn Tornado?

Как исправить сломанный python 2.7.11 после обновлений OSx

Firefox + Selenium WebDriver и автоматически загружайте файл csv

Автоматически создавать графический интерфейс из XML-схемы

Что такое многоплатформенная альтернатива subprocess.getstatusoutput (более старые команды.setstatusoutput () из Python?

Как использовать importlib для импорта модулей из произвольных источников?

Сила пароля Python

внезапно я получаю DJANGO_SETTINGS_MODULE не определяется при использовании сервера

Использование разных привязок в одном классе в Flask-SQLAlchemy

Вложенный словарь в мультииндексный фреймворк, где словарные ключи – это метки столбцов

Фильтр Django с регулярным выражением

Получить индекс недавно добавленного элемента

Что я делаю неправильно с запросами в python: ValueError: Ожидающее значение: строка 1 столбец 1 (char 0)?

Python - лучший язык программирования в мире.