strawberry logo lane historia ejemplos perl

logo - perl vs python



¿Cómo gestionas tu desarrollo, construcción e implementación de la aplicación Perl? (2)

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.

Describa su tipo de aplicación (¿se trata de una aplicación web, se ejecuta en un servidor o la agrupa con PAR o PerlApp para que pueda ejecutarse en sistemas Perlless).

Cosas clave que un sistema de compilación debe proporcionar:

  • Control de bibliotecas.
    • Debería ser posible verificar la distribución de una biblioteca en mi directorio de desarrollo para usarla en mi compilación.
    • Debería ser fácil ejecutar Perl con un valor @INC que usará los directorios apropiados.
    • Debería ser posible obtener una lista de módulos que se están obteniendo de la instalación perl del sistema.
  • Integración Makefile / Build
    • Debería ser fácil realizar una prueba global en toda la aplicación emitiendo solo una make test o un comando similar.
  • Control de versiones amigable
    • la estructura no debe interferir con el uso normal de CVS, SVN y otros sistemas de control de versiones.
  • Plataforma cruzada
    • El sistema debería funcionar en sistemas derivados Win32 y Unix como mínimo.
    • Idealmente, las herramientas deberían funcionar de manera idéntica en todos los lugares donde opera perl.
  • Instalación de Single Perl
    • No debería ser necesario instalar Perl en un directorio especial como parte de la configuración del entorno.
  • Fácil inicio
    • Iniciar una aplicación debería ser un proceso mayormente 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.

Publicado en Perlmonks .


Hay mucho que podría escribir sobre esto

  1. Control de bibliotecas: creo mis propias versiones de CPAN con solo 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, creas 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 -t cambiar al comando cpan es útil para probar el módulo en el directorio de trabajo actual:

    cpan -t.

Existen varios marcos de prueba de interposició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 el control de versiones: no importa mucho lo que uses. 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 vas 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. Inicio fácil: solo 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.


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 algo mejora).

Tenemos tres cosas que necesitamos hacer para configurar nuestro sitio web:

  1. Un módulo de Perl creado usando Module::Starter , que contiene un módulo de Config que contiene las opciones de configuración de todo el sitio. En la instalación, este módulo (utilizando MakeMaker de PREREQ_PM para verificar que todos los módulos requeridos ya hayan 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 que saque de las sucursales de Git de todos y empaque 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, o lo instalamos sobre la última versión, o trasladamos la base de datos a la instancia de prueba y la convertimos en la nueva instancia.

Comparando esto con sus criterios:

  1. Control de bibliotecas: algo. 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 (por ejemplo, grep ing para líneas que comienzan con el use ).
  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 banco de pruebas completo terminó recientemente en una carpeta, con suerte pronto tendremos algo con lo que puede prove directamente.
  3. Compatible con el control de versiones: 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 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 ha realizado un gran esfuerzo para lograr que CPAN , EU::MM y otros funcionen bien en todos los sistemas, y parece una pena desperdiciarlo
  6. Inicio 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 utilizar la comunidad Perl Win32 para tratar de resolver problemas con los módulos problemáticos de CPAN.

Eso sí, es un sitio web realmente simple, sin XS, framework web complicado, ni nada por el estilo. También solo hemos admitido esta configuración a través de aproximadamente dos versiones, por lo que no tenemos experiencia suficiente sobre cómo va a 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.