#python #google-app-engine #python-2.7 #yaml
# #python #google-app-engine #python-2.7 #yaml
Вопрос:
Я переношу свое приложение gae на python 2.7. Это мое новое приложение.yaml:
application: webfaze
version: main
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /mapreduce(/.*)?
script: mapreduce/main.application
- url: /(.*.(html|css|js|gif|jpg|png|ico|swf))
static_files: static/1
upload: static/.*
expiration: "1d"
- url: .*
script: main.application
- url: /task/.*
script: main.application
login: admin
Но я получаю это сообщение об ошибке:
Error parsing yaml file:
Invalid object:
threadsafe cannot be enabled with CGI handler: mapreduce/main.application
in "webfaze/app.yaml", line 22, column 1
Можете ли вы сказать мне, как устранить ошибку?
Ответ №1:
Проверяя исходный код, похоже, что вам нужно определить путь ваших обработчиков без какой-либо косой черты:
if (handler.script and (handler.script.endswith('.py') or
'/' in handler.script)):
raise appinfo_errors.ThreadsafeWithCgiHandler(
'threadsafe cannot be enabled with CGI handler: %s' %
handler.script)
Перейдите application.py
в корень вашего проекта и соответствующим образом измените путь обработчика.
Комментарии:
1. Спасибо, это правда, что я мог бы просто опустить часть mapreduce, поскольку в данный момент я ее не использую. Теперь обновление прошло проверку синтаксиса, и мне любопытно посмотреть, что произошло теперь, когда я только что запустил
set_default_version
2. Или назовите его
mapreduce.main.application
.3. Спасибо @Nick Johnson за полное решение. Я мог бы перенести все приложение на python 2.7 без особых усилий 🙂
4. У меня все еще были проблемы с именованием
mapreduce.main.application
после поиска в Интернете, я нашел script:google.appengine.ext.mapreduce.main.APP
from: groups.google.com/forum/?fromgroups #!тема/google-appengine/…
Ответ №2:
Изменить:
- url: /mapreduce(/.*)?
script: mapreduce/main.application
Для:
- url: /mapreduce(/.*)?
script: mapreduce.main.application
Вам также может потребоваться добавить __init__.py в папку ‘mapreduce’, если она там еще не существует. Это заставит python интерпретировать папку как модуль.
Комментарии:
1. Я попробовал последнюю версию, и, похоже, она менялась от приложения к приложению
2. @wonglik По «последней версии», какая это будет версия. Я запускаю версию 1.7.0 SDK и меняю «application» на «app», что выдает ошибку 500 (Server).
3. Извините. Я имел в виду последнюю версию пакета MapReduce — 1.6.2, взятую отсюда developers.google.com/appengine/downloads
4. @wonglik Возможно, это изменится, чтобы соответствовать другим версиям, как только они будут обновлены. Согласно developers.google.com/appengine/docs/python/dataprocessing /… пакет MapReduce по-прежнему считается экспериментальным.
5. Я обнаружил, что вам также необходимо внести аналогичные изменения в mapreduce / include.yaml