Плагин архитектуры для рельсов CMS - PullRequest
6 голосов
/ 02 августа 2009

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

Ответы [ 4 ]

2 голосов
/ 13 января 2010

С точки зрения кода плагина для каждого клиента, вы можете сохранить код в модели данных и затем выполнить eval () код для его динамического выполнения. (Конечно, вы хотели бы сделать некоторые серьезные проверки / очистки при обновлении, чтобы убедиться, что код не содержит вредоносных вызовов). Другой подход может заключаться в разработке пользовательской библиотеки тегов, в значительной степени аналогичной тому, что разработали разработчики Radiant CMS ... и затем позволяет вашим пользователям "программировать" свое поведение, используя предоставленные теги. Это дает вам больший контроль и лучшую безопасность за счет меньшей гибкости.

С точки зрения вопроса простоя, если вы используете современный подход к развертыванию рельсов, я не понимаю, как это должно быть проблемой. Подход eval (), описанный выше, не требует перезапуска (если ваш пользовательский код не вызывает "include ..." для библиотек, которые не были установлены во время последней загрузки - но установка этих библиотек также является "внешней" "проблема, которую вам нужно решить.

Пассажир дает вам файл restart.txt, к которому вы можете прикоснуться, чтобы принудительно выполнить обновление. Точно так же существуют рецепты для беспородных (как см. Пила), которые позволяют постепенно перезагружать свой стек беспородных, чтобы избежать простоев. Я бы мысленно раздвинул эти две проблемы, если бы я был тобой, так как зависимости между ними не так уж велики. Надеюсь, это поможет.

1 голос
/ 13 августа 2009

Я создал cms и добавил поддержку плагина для него. Лучшее, что вы можете сделать - это использовать все базы данных, плагин для всех технически, но вы можете использовать его, только если вы «купили» его, или каким-то другим способом включить его. на самом деле просто запись в БД.

Это было бы 0 простоя. :) Опять же, я понятия не имею, как выглядит остальная часть вашей установки. Я думаю, что ваше решение будет специально адаптировано к вашей системе CMS.

0 голосов
/ 13 января 2010

Не знаю, если это именно то, чего вы пытаетесь достичь, но вы проверили блин?

Pancake - это инструмент и инфраструктура, позволяющие вам составлять стеки и свободно связывать веб-приложения на основе Rack.

http://www.rubyinside.com/pancake-rack-webapps-stacking-2863.html

0 голосов
/ 08 января 2010

как долго будет это время простоя? я имею в виду запуск миграций и прочее - это боль для системы, которая позволяет любому члену или Гарри загрузить плагин. Вы должны убедиться, что миграции были настроены правильно и т. Д., Если вы не получаете эту «причудливость» и просто позволяете им делать что-то «аккуратное» в js, тогда я думаю, что это вопрос перезапуска пассажира, какие 5 секунд?

Я бы проверил другие «знаменитые» CMS, такие как радиант или что-то в этом роде, чтобы посмотреть, если / как они это делают, лично. удачи.

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