GAE 1.5.5 имеет отличные, долгожданные функции. Тем не менее, они еще не работают для меня.
Я скачал и установил GAE 1.5.5 и использую вырожденное приложение «AAA» для тестирования.
Вот примерно мой app.yaml (с различными изменениями, внесенными для тестирования).
app.yaml
application: AAA # mystical creation.
version: alpha-1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /media
static_dir: media/
- url: /favicon.ico
static_files: media/images/favicon.ico
upload: media/images/favicon.ico
- url: /admin
script: AAA.app
login: admin
- url: /.*
script: AAA.app
skip_files:
- ^(.*/)?app\.yaml
libraries:
- name: django
version: "1.2"
- name: jinja2
version: latest
- name: yaml
version: latest
Я запускаю это на Mac OS X Lion (10.7.1).
Я предполагаю, что на самом деле я не использую среду выполнения Python 2.7, несмотря на объявление в app.yaml о его использовании. Я не совсем уверен, как проверить эту теорию, но ошибки, с которыми я столкнулся, соответствуют ей. Эти ошибки воспроизводятся ниже.
Python Path
Если путь к Python в Google App Engine не задан, механизм приложения запускается
используя Python 2.6.6.
Чтобы исправить это, я установил Python Path на /usr/bin/python2.7
в Google App
Настройки двигателя.
WSGI
Я получаю следующую ошибку:
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/
GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/
google/appengine/tools/dev_appserver.py in
GetParentPackage(self=<google.appengine.tools.dev_appserver.HardenedModulesHook
object>, fullname='AAA.app')
2334
2335 if self.find_module(fullname) is None:
=> 2336 raise ImportError('Could not find module %s' %
fullname)
2337
2338 return self._module_dict[parent_module_fullname]
builtin ImportError = <type 'exceptions.ImportError'>, fullname =
'AAA.app'
<type 'exceptions.ImportError'>: Could not find module AAA.app
args = ('Could not find module AAA.app',)
message = 'Could not find module AAA.app'
Где я пробовал AAA.app как:
AAA.py:
from google.appengine.dist import use_library
use_library('django', '1.2') # otherwise we still get django 0.96
from django.core.handlers import wsgi
app = wsgi.WSGIHandler()
AAA / __init__.py
# same content as above
AAA / AAA.py
# same content as above
Обратите внимание, что я могу продолжать запускать CGI с измененными app.yaml и AAA.py,
mutatis mutandis . Однако, тем не менее, это приводит к следующим ошибкам:
Jinja2
Когда я запускаю import jinja2
, я получаю ImportError
.
* * Django2 тысяча сорок-девять
Без:
from google.appengine.dist import use_library
use_library('django', '1.2')
Я получаю Джанго 0,96.
Теория
Учитывая следующее:
- http://code.google.com/appengine/docs/python/tools/libraries27.html
заявляет "функция use_library (), предоставленная
Пакет google.appengine.dist недоступен в Python 2.7. "
- use_library работ для меня
- use_library требуется, потому что "библиотеки: {django: {...,
версия: "1.2"}} объявление не устанавливает версию django 1.2
- Только Django 1.2 включен в среду исполнения Python 2.7 (согласно
Библиотеки27.html ссылка выше)
- Я должен вручную указать Python 2.7 в пути Python по порядку
для GAE использовать Python 2.7
- WSGI неправильно загружает приложение
- Jinja2 не может быть импортирован
Я полагаю, что я на самом деле не использую среду исполнения Python 2.7 GAE (то есть объявление app.yaml игнорируется в SDK GAE 1.5.5).
Я надеюсь, что вышеизложенное является полезным описанием, и я был бы благодарен за любые мысли о том, что может происходить здесь - и возможных решениях.