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

  • «ImportError: без модуля с именем webapp2» после обновления Linux SDK (1.9.35 -> 1.9.38)
  • Существуют ли экземпляры GAE для 10 одновременных запросов?
  • Как получить идентификатор приложения во время выполнения
  • Как аутентифицироваться с помощью API Google Spreadsheets с помощью службы клиента / обнаружения Python?
  • Поиск всех Google с помощью Google Python API
  • GAE и Facebook Connect: как получить возраст и пол пользователя?
  • Пользовательские ключи для моделей Google App Engine (Python)
  • Django 1.7 в App Engine "ImportError: нет модуля с именем msvcrt"
  • Ошибка при запуске endpointscfg.py get_swagger_spec
  • Как предотвратить вызов приложения datastore_v3.next () при вызове get_multi?
  • Это приложение не существует (app_id = xxx)
  •  
    Interesting Posts for Van-Lav

    Изменение регистра (верхний / нижний) при добавлении данных через админ-сайт Django

    Как создать DLL с SWIG из Visual Studio 2010

    Загрузочный образ Django REST Framework: «Представленные данные не были файлом»

    Почему фоновая задача блокирует ответ в SimpleHTTPServer?

    Использование Flask-Social только с провайдером Oauth, без регистрации и регистрации

    Местоположение робота и название ключевого слова

    Можно ли получить «импортирующий модуль» в «импортированном модуле» в Python?

    Как найти пример связанного метода в Python?

    Получить файл-объект из номера файла

    Внутридневные подсвечники с использованием Matplotlib

    Как проверить, находится ли конкретное целое число в списке

    Нажмите кнопку href с селеном и питоном?

    Использование Boto для указания, когда файл был успешно загружен на ледник

    Создание динамических очередей с помощью Сельдерея

    Не удалось установить nltk на Mac OS El Capitan

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