Как разработать расширяемую CMS для Google App Engine?

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

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


person Jader Dias    schedule 15.12.2009    source источник


Ответы (3)


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

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

person Null Pointer    schedule 22.12.2009
comment
Знаете ли вы, возможно ли то же самое в Python? - person Jader Dias; 22.12.2009
comment
Python является языком сценариев и имеет функцию eval(), так что это определенно должно быть возможно. - person Null Pointer; 23.12.2009

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

person AutomatedTester    schedule 15.12.2009
comment
Ник Джонсон еще не добрался до части расширяемости, но это одна из функций, которую, по его словам, он добавит. - person Jader Dias; 19.12.2009

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

exec plugincode in someDict

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

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

person Sam Jacobson    schedule 23.06.2012