С точки зрения кода плагина для каждого клиента, вы можете сохранить код в модели данных и затем выполнить eval () код для его динамического выполнения. (Конечно, вы хотели бы сделать некоторые серьезные проверки / очистки при обновлении, чтобы убедиться, что код не содержит вредоносных вызовов). Другой подход может заключаться в разработке пользовательской библиотеки тегов, в значительной степени аналогичной тому, что разработали разработчики Radiant CMS ... и затем позволяет вашим пользователям "программировать" свое поведение, используя предоставленные теги. Это дает вам больший контроль и лучшую безопасность за счет меньшей гибкости.
С точки зрения вопроса простоя, если вы используете современный подход к развертыванию рельсов, я не понимаю, как это должно быть проблемой. Подход eval (), описанный выше, не требует перезапуска (если ваш пользовательский код не вызывает "include ..." для библиотек, которые не были установлены во время последней загрузки - но установка этих библиотек также является "внешней" "проблема, которую вам нужно решить.
Пассажир дает вам файл restart.txt, к которому вы можете прикоснуться, чтобы принудительно выполнить обновление. Точно так же существуют рецепты для беспородных (как см. Пила), которые позволяют постепенно перезагружать свой стек беспородных, чтобы избежать простоев. Я бы мысленно раздвинул эти две проблемы, если бы я был тобой, так как зависимости между ними не так уж велики. Надеюсь, это поможет.