2009-08-01 12 views
6

Estoy trabajando en un cms y quería poder ofrecer extensiones personalizadas para ciertas cuentas. Como tener un complemento con código personalizado que solo está disponible o que solo usa esa cuenta. Estas extensiones personalizadas serían específicas para las necesidades comerciales de una cuenta y quizás poco probable que otras cuentas la necesiten, pero tal vez. ¿Hay alguna forma de que esto se pueda hacer y cargar sin tener que reiniciar toda la aplicación, creando así un tiempo de inactividad para las otras cuentas?Arquitectura del complemento para los rieles cms

Respuesta

2

En términos de código del plugin por cliente, se puede almacenar el código en un modelo de datos y luego eval() el código para ejecutar dinámicamente. (Por supuesto, le recomendamos que realice una revisión/depuración de la cordura en la actualización para asegurarse de que el código no contenga llamadas maliciosas). Otro enfoque podría ser desarrollar una biblioteca de etiquetas personalizadas, muy similar a lo que los desarrolladores de Radiant CMS han creado ... y luego dejar que los usuarios "programen" su comportamiento utilizando las etiquetas proporcionadas. Esto le da más control y una mayor seguridad a expensas de una menor flexibilidad.

En términos de la pregunta sobre el tiempo de inactividad, si está utilizando un enfoque moderno de implementación de rieles, no veo cómo esto debería ser un problema. El enfoque anterior de eval() no requiere un reinicio (a menos que su código personalizado llame a "incluir ..." en bibliotecas que no están instaladas en el momento del último arranque, pero tener estas bibliotecas instaladas también es un "fuera de banda" "problema que necesitaría resolver.

Passenger le brinda el archivo restart.txt que puede tocar para forzar una actualización. Del mismo modo, hay recetas para mestizos (como see saw) que le permiten reiniciar progresivamente su pila de mestizos para evitar el tiempo de inactividad. Me gustaría separar estos dos aspectos mentalmente si fuera usted, ya que las dependencias entre los dos no son tan grandes. Espero que esto ayude.

+0

Creo que esta es una solución bastante buena (aunque eval() es bastante aterrador) porque yo soy el que estaría desarrollando el código, no los usuarios. Por supuesto, si hubiera una masa-ap módulo peal entonces podría simplemente construirlo de forma normal y restringir el acceso a él. La instancia específica es para la personalización por cuenta, así que creo que esto funcionaría mejor. – bwizzy

1

Creé un cms y agregué complementos para él. Lo mejor que puede hacer es hacer que todo se base en la base de datos, el complemento existe para todos, técnicamente, pero solo puede usarlo si lo "compró", o de alguna otra manera de encenderlo ... que es realmente solo un registro db.

Eso sería 0 tiempo de inactividad. :) Por otra parte, no tengo idea de cómo se ve el resto de tu instalación. Creo que su solución se adaptará específicamente a su diseño de sistema cms.

0

¿cuánto tiempo sería este tiempo de inactividad realmente? me refiero a ejecutar migraciones y cosas sería un dolor para un sistema que permite a cualquier Tom Dick o Harry subir un complemento. Debería verificar que las migraciones se hayan configurado correctamente, etc., si no está obteniendo ese 'lujo' y simplemente dejar que hagan algo 'ordenado' en js, entonces supongo que se trata de reiniciar el pasajero, que es ¿Qué 5 segundos?

Revisaré otros CMS 'famosos' como radiantes o algo para ver si/cómo lo hacen, personalmente. buena suerte.

Cuestiones relacionadas