2010-02-12 2 views
4

Можно ли запускать скрипт каждый раз, когда запускается сервер dev? Также при каждом развертывании в Google?Запуск сценария при запуске сервера в движке Google в Python

Я хочу, чтобы приложение заполнило базу данных на основе того, что возвращает некоторые методы.

Есть ли способ сделать это?

..fredrik

ответ

4

Я использую appengine python с помощником django. Насколько я знаю, вы не можете подключить что-либо к развертыванию, но вы можете позвонить, чтобы проверить, нужно ли выполнять настройку в основной функции main.py. Именно так хелпер инициализируется при первом запросе. Я не смотрел на webapp через некоторое время, но я предполагаю, что main.py действует аналогично для этой структуры.

Помните, что main выполняется по первому запросу, а не при первом развертывании. Это также произойдет, если appengine запускает новый экземпляр для обработки нагрузки, или если все экземпляры были остановлены из-за бездействия. Поэтому убедитесь, что вы проверяете, нужно ли вам выполнять инициализацию, а затем делать это только при необходимости.

+0

Спасибо, отлично работает! – fredrik

+0

Это решение - лучшее, что я нашел до сих пор, но оно работает только для «на старте сервера», а не для «при развертывании». Существуют периоды, когда никто не запрашивает ваше приложение, поэтому экземпляр, запускающий вашу программу, может «разгрузить» его. Когда пользователь появляется, экземпляр перезагружает вашу программу и говорит: «Этот запрос запустил новый процесс для вашего приложения и, таким образом, вызвал загрузку вашего кода приложения в первый раз. Таким образом, этот запрос может потребовать больше времени и использовать больше ЦП, чем типичный запрос для вашего приложения. «Если у вас были данные, которые вы хотели бы вычислить только при развертывании, он пересчитывается при перезагрузке – gentimouton

2

Вы можете сделать это, написав сценарий в вашем любимом языке сценариев, который выполняет действия, которые вы хотите, а затем запускает сервер Dev или запускает appcfg.py обновления.

+0

Ну, не совсем то, что мне нужно. Я хочу, чтобы все было наоборот. Я хочу, чтобы сервер запускал скрипт при его запуске. – fredrik

+0

Простите, что это не то, что вам нужно, но это сработает. Ваши другие варианты взломают dev_appserver.py или вводят код в основную функцию вашего приложения AppEngine. Первый вариант - ужасная идея, потому что вы действительно не хотите разветвлять инфраструктуру AppEngine, и ваши изменения будут потеряны каждый раз при установке новой версии AppEngine. Второй вариант технически запускается после запуска сервера, и он также может сломаться при развертывании на производство. Я не хотел просто отвечать «Нет» на ваш вопрос, поэтому я дал вам возможность. –

1

Попробуйте сделать обертку вокруг бегуна сервера и скрипта, запускающего развертывание. Таким образом, вы сможете запускать собственный код, когда вам нужно.

Смежные вопросы