Как создать расширяемую CMS для Google App Engine? - PullRequest
1 голос
/ 15 декабря 2009

Я фанат расширяемости CMS. Вы можете загрузить некоторый код (обычно PHP), авторизовать его из панели администратора CMS, и он будет запущен.

Интересно, возможно ли это в Google App Engine. Я не проверял расширяемость существующих CMS для Google App Engine, но если есть какие-либо из них, которые поддерживают плагины, я хотел бы знать, как они это сделали, и являются ли они только плагинами JS, или они поддерживают Python / Java плагины тоже.

Ответы [ 3 ]

2 голосов
/ 24 июня 2012

У меня нет публичного примера, на который можно было бы указать (извините), но я могу подтвердить, что возможно создание плагинов Python для проекта App Engine. Я завершил проект несколько месяцев назад, который делает что-то вроде этого. Суть дела сводится к одной строке Python:

exec plugincode in someDict

Над 'plugincode' находится строка, содержащая некоторый код Python для выполнения, а someDict - это словарь глобальных переменных для его выполнения. Возможно, это чище, чем использование eval (). В нашем случае словарь globals содержал экземпляр объекта, который подключаемый код использовал для связи с системой. Я не могу думать о каких-либо серьезных ограничениях с этим (или подобными) подходами. например подключаемый код может объявить класс и зарегистрировать экземпляр этого класса в качестве обработчика обратного вызова и т. д. и т. д.

В нашем случае мы сохранили код плагина в хранилище данных и загружали его в подходящее время (например, когда запускается экземпляр приложения).

2 голосов
/ 15 декабря 2009

Ник Джонсон из Google написал серию постов в блоге о том, как написать систему блогов для движка приложений . Если он не делает то, что вы хотите, я уверен, что вы можете расширить его, но обычно для CMS достаточно системы блогов для большинства людей.

1 голос
/ 22 декабря 2009

На самом деле я не вижу концептуальной проблемы с поддержкой плагинов в приложении App Engine. Например, на Java вы можете извлечь jar плагина в память из хранилища данных или memcache (на этапе инициализации приложения), а затем использовать пользовательский загрузчик классов для загрузки классов плагина по мере необходимости). На самом деле вы даже можете загружать классы из данных запроса и при необходимости оценивать их на лету (как мы это делаем в AppWrench консоли Java).

С уважением, Павел.

...