2009-03-17 24 views
45

Todavía tengo que encontrar una manera satisfactoria de administrar el desarrollo, la construcción y el despliegue de mis aplicaciones Perl. Me gustaría saber cómo ha resuelto este problema y/o qué le gustaría tener en un sistema de compilación de aplicaciones que no tiene ahora.¿Cómo gestionas tu desarrollo, compilación e implementación de la aplicación Perl?

Por favor describa el tipo de aplicación (se trata de una aplicación web, no se ejecuta en un servidor, o te agrupar usando PAR o PerlApp para que pueda ejecutarse en sistemas perlless).

cosas clave de un sistema de construcción debe proporcionar:

  • control de las bibliotecas.
    • Debería ser posible verificar la distribución de una biblioteca en mi directorio dev para usarla en mi compilación.
    • Debe ser fácil ejecutar perl con un valor @INC que utilizará los directorios apropiados.
    • Debería ser posible obtener una lista de los módulos que se están obteniendo de la instalación perl del sistema.
  • Makefile/Construir la integración
    • Debe ser fácil de hacer una prueba global en toda la aplicación mediante la emisión de un solo make test o un comando similar.
  • El control de versiones de usar la estructura
    • no debe interferir con el uso normal de CVS, SVN y otros sistemas de control de versiones .
  • plataforma Cross
    • sistema debe operar en sistemas Win32 y Unix derivadas como mínimo.
    • Lo ideal es que las herramientas funcionen de forma idéntica en todos los lugares donde opera perl.
  • individual Perl instalar
    • No debería ser necesaria la instalación de Perl en un directorio especial como parte de la configuración del entorno.
  • Fácil puesta en marcha
    • Inicio de una aplicación debe ser un proceso muy automatizado. Algo similar a Module :: Starter o h2xs debería estar disponible para diseñar una estructura básica y crear cualquier archivo estándar.

Cruz-registrado en Perlmonks.

Respuesta

17

Hay mucho que podría escribir sobre este

  1. control de las bibliotecas - creo mis propias versiones de CPAN con sólo los módulos que quiero. Las últimas versiones de App::Cpan tienen varias características, como la opción -j para cargar configuraciones de una sola vez, para ayudar con esto. Una vez que tenga esto, puede distribuirlo en un disco USB o CD que tenga todos los módulos, la configuración de CPAN.pm y todo lo demás que necesite. Con un poco de programación, crea un script run_me que hace que todo suceda.

  2. Integración Makefile/Build: no integro los Makefiles. Ese es el camino al desastre. En cambio, realizo pruebas de integración con el módulo de aplicación de nivel superior, que también prueba automáticamente todas sus dependencias. El cambio -t al comando cpan es útil para probar el módulo en el directorio de trabajo actual:

    cpan -t.

Existen varios marcos de pruebas de intercalación que puede usar también. Establece PERL5LIB en algo vacío (con solo los módulos principales en los directorios @INC codificados) para que cpan tenga que instalar todo desde cero.

  1. Compatible con la versión de control, no importa mucho lo que use. La mayoría de las cosas tienen algún tipo de exportación en la que puede obtener todo sin las cosas de control de origen. Git es muy bueno porque solo tiene un mínimo de contaminación en los casos normales.

  2. Plataforma cruzada: todo lo que he mencionado funciona bien en Windows y Unix.

  3. Instalación de Single Perl: esta parte es más complicada, y creo que va por el camino equivocado. Cada vez que varias cosas tienen que depender del mismo perl, alguien lo va a estropear para los demás. Definitivamente recomiendo no usar el sistema Perl para el desarrollo de aplicaciones solo para no estropear el funcionamiento del sistema. Como mínimo, cada aplicación debe instalar todos los módulos no principales en sus propios directorios para que no compitan con otras aplicaciones.

  4. Arranque fácil: es una simple cuestión de programación.

BONUS: No uso Module :: Starter. No es el camino correcto, ya que tienes que depender de lo que Module :: Starter piensa que debes hacer. Yo uso Distribution::Cooker que simplemente toma un directorio de plantillas de Template Toolkit y las procesa para darles su directorio de distribución. Puedes hacer lo que quieras. Cómo obtienes las plantillas iniciales depende de ti.

+0

Gran respuesta, gracias. Un sistema que funcionará para mí no debe instalar cosas en el sitio, y debe poder coexistir con un solo sistema perl. Mi trabajo con versiones anteriores de ActivePerl lo convierte en un requisito absoluto. Siempre que sea posible, acepto que es mejor usar un perl por separado. – daotoad

7

Trabajo en una aplicación de sitio web bastante pequeña, y estamos trabajando para mejorar nuestra implementación (mejorando desde "pasar un día configurando todos los módulos que necesitamos en Windows y luego lanzar archivos hasta que todo funcione") ", así que eso es una mejora).

Tenemos tres cosas que hay que hacer para establecer nuestra página web:

  1. Un módulo de Perl hecho usando Module::Starter, que contiene un módulo Config que mantiene las opciones de configuración de todo el sitio. En la instalación, este módulo (usando MakeMaker 's PREREQ_PM para comprobar que todos los módulos que requerimos ya han sido instalados). Cualquier módulo que no haya sido necesario instalar antes de que este módulo pueda ser instalado.
  2. Algunos archivos SQL que deben ejecutarse para configurar la base de datos.
  3. Los archivos Perl CGI que componen el sitio web. Mientras Apache se les señale, el sitio web "simplemente funciona". Esto incluye los módulos de código comunes utilizados por todos los archivos de Perl.

El despliegue consiste en mí tirando de todas las ramas de Git y empaquetando una versión. Luego podemos entregar esto para la prueba, ya sea localmente o en una instancia de Amazon EC2. Una vez que estamos listos para lanzar, lo instalamos sobre la última versión, o trasladamos la base de datos a la instancia de prueba y hacemos esa nueva instancia.

Comparando esto con sus requisitos:

  1. control de las bibliotecas: Un poco. Usamos los módulos de CPAN bastante extensamente. Para probar una nueva versión, actualizamos nuestra propia versión de un módulo antes de hacer esa actualización en el servidor de producción. Mantenemos manualmente una lista, pero dado que nuestra base de código es bastante pequeña, no es difícil determinar qué módulos se están utilizando (a través de grep ing para líneas que comienzan con use, por ejemplo).
  2. Integración Makefile/Build: Sí. Cualquier material relacionado con Makefile se hace con nuestra configuración EU :: MM. No tenemos pruebas globales, pero dado que nuestro conjunto de pruebas completo terminó recientemente en una carpeta, con suerte pronto tendremos algo en lo que puede ejecutar prove directamente.
  3. Compatible con la versión de control: sí. Nuestro código fuente completo está contenido en una sola carpeta, sin mucha duplicación.
  4. plataforma cruzada: sí. Tenemos muchas cosas raras en MakeMaker que nos permiten hacer esto, pero como startup, tener un código multiplataforma nos brinda una flexibilidad valiosa. Intentamos usar tanto los módulos principales y las herramientas de Perl como los módulos Pure Perl del CPAN, tanto como sea posible.
  5. Instalación de Single Perl: sí. Podemos manejar Perl en cualquier lugar, e instalarlo bajo cualquier configuración, siempre y cuando todas las herramientas de módulos propios de Perl puedan funcionar; se han realizado muchos esfuerzos para obtener CPAN, EU::MM y otras que funcionen bien en todos los sistemas, y parece una pena desperdiciarlo
  6. Arranque fácil: No realmente. Este sistema evolucionó (es decir, no se diseñó inteligentemente) desde una única carpeta de todos los archivos fuente y un archivo de texto con una lista de módulos que deben instalarse. Si bien formalizar las pruebas para los módulos instalados es una gran mejora, todavía nos lleva algo así como un día configurarlo, principalmente dedicando la instalación de nuestros módulos de requisitos previos (no todos son fáciles de instalar en Windows). Espero usar the Perl Win32 community para tratar de resolver problemas con los módulos problemáticos de CPAN.

Eso sí, es una página web realmente sencillo, no XS, marco complicada red, o de cualquier tipo. También solo hemos admitido esta configuración a través de aproximadamente dos versiones, por lo que no tenemos suficiente experiencia sobre cómo funcionará, ya que el código se vuelve más complicado y nuestras plataformas de implementación se vuelven más variadas.Realmente agradecería cualquier sugerencia o comentario sobre nuestro sistema.

+0

Estoy haciendo cosas similares, y todo me parece demasiado manual y propenso a errores. He evolucionado un poco con el tiempo, pero tengo que admitir múltiples aplicaciones, así que no estoy dispuesto a hacer demasiados cambios. – daotoad

Cuestiones relacionadas