Posts tagged PHP

Packager + Composer = repositorios privados – Parte 2

0

PHP Composer Packager

Siguiendo con la serie de posts referentes a packager. En esta segunda parte vamos a integrar packager y composer para poder crear un repositorio que tenga nuestros propios paquetes, pero además que contengan las dependencias de estos y otros paquetes que utilizamos en nuestros proyectos.

Recordamos que tenemos un repositorio con la siguiente estructura

.
├── packager.json
├── packages
│   └── packager-1.0.0.zip
└── packages.json

Ahora bien, supongamos que nuestros proyectos tienen dependencia con los siguientes componentes de symfony

  • symfony/console 2.1
  • symfony/finder 2.1
  • symfony/process 2.1
  • symfony/yaml 2.1
  • symfony/filesystem 2.1

Lo que vamos a necesitar ahora es crear un file llamado “composer.json” al nivel de “packages.json” donde declararemos nuestras dependencias y configuraremos a composer para que guarde los files que baja en el directorio donde nosotros alojamos nuestros paquetes (cache-files-dir=./packages)

{
    "name": "rgnu.com.ar/repository",
    "description": "Download repository dependencies",
    "type": "repository",
    "license": "GPL-3.0",
    "version": "0.1.1",
    "keywords": [ "repository" ],

    "require": {
        "symfony/console": "2.1.*@stable",
        "symfony/finder": "2.1.*@stable",
        "symfony/process": "2.1.*@stable",
        "symfony/filesystem": "2.1.*@stable",
        "symfony/yaml": "2.1.*@stable"
    },

    "config": {
        "cache-files-dir": "./packages"
    }
}

Una ves realizado esto ejecutamos un composer update, para que este baje las dependencias

$ ../composer.phar update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing symfony/console (v2.1.8)
    Downloading: 100%         

  - Installing symfony/finder (v2.1.8)
    Downloading: 100%         

  - Installing symfony/process (v2.1.8)
    Downloading: 100%         

  - Installing symfony/filesystem (v2.1.8)
    Downloading: 100%         

  - Installing symfony/yaml (v2.1.8)
    Downloading: 100%         

Writing lock file
Generating autoload files

Una vez realizado el update, podemos borrar tanto el directorio vendor que se creo, como el file composer.lock

$ rm -rf vendor composer.lock

Ahora nuestro repositorio debería tener el siguiente contenido

.
├── composer.json
├── packager.json
├── packages
│   ├── packager-1.0.0.zip
│   └── symfony
│       ├── console
│       │   └── 2.1.8.0-v2.1.8.zip
│       ├── filesystem
│       │   └── 2.1.8.0-v2.1.8.zip
│       ├── finder
│       │   └── 2.1.8.0-v2.1.8.zip
│       ├── process
│       │   └── 2.1.8.0-v2.1.8.zip
│       └── yaml
│           └── 2.1.8.0-v2.1.8.zip
└── packages.json

Ahora lo único que nos queda es volver a realizar el build del repositorio para que incluya los paquetes que composer acaba de bajar

$ ../packager.phar build:repository
Loading Config ./packager.json
Process Repository ./
Add package rgnu.com.ar/packager (1.0.0)
Add package symfony/yaml (v2.1.8)
Add package symfony/console (v2.1.8)
Add package symfony/filesystem (v2.1.8)
Add package symfony/process (v2.1.8)
Add package symfony/finder (v2.1.8)

En la próxima entrega veremos como automatizar todo el proceso con Jenkins, de esta forma solo nos queda mantener el file “composer.json” con las dependencias y agregar nuestros paquetes al repositorio.

Packager + Composer = repositorios privados

1


Después de casi dos años de no postear nada, voy a tratar de armar una serie de posts relacionados con packager, una herramienta que se creó con el objetivo de mitigar algunas limitaciones y aspectos negativos del uso de composer y el repositorio que este usa por defecto packagist.org.

Hay dos aspectos que tratamos de solucionar con esta herramienta, el primero es poder generar un repositorio para composer que pudiera contener paquetes desarrollados internamente en la empresa, y el segundo es el problema de performance que actualmente tiene composer al realizar operaciones de update, install, search, etc, teniendo habilitado su repositorio por defecto. Este último lo logramos resolver al crear un repositorios que solo tiene aquellos paquetes que nos interesan, de esta forma reducimos considerablemente el tamaño del mismo.

Basta de tanto parloteo y pasemos a la acción. (más…)

Symfony Components – Librerias PHP

0

La gente detrás de Symfony, uno de los Frameworks más usados por la comunidad PHP ha publicado una serie de librerias independientes, que prometen ayudar con el proceso de desarrollo de aplicaciones Web, en su web reza la siguiente frase:

The Symfony Components are standalone and reusable PHP classes. With no pre-requisite, except for PHP, you can install them today, and start using them right away. Currently, there are three components available at the moment.

Los componentes publicados hasta el momento son:

YAML – Una librería que habla YAML
Symfony YAML es una libreria PHP que convierte cadenas YAML a arreglos PHP y viceversa.

Event Dispatcher – Facilitando la comunicación entre clases
Symfony Event Dispatcher es una librería que provee de una implementación ligera del patrón de diseño Observer.

Dependency Injection – Reinventando el manejo de clases
Symfony Dependency Injection es una librería que provee un robusto contenedor de inyección de dependencias (Dependency Injection).

iPHP: Shell Interactivo para PHP

1

iPHP es un proyecto que planea desarrollar un Shell interactivo para PHP, al igual que existe en Python y el “irb” en Ruby, que realmente son herramientas muy poderosas y, a mi entender, muchas veces necesarias.  Hace un buen tiempo que estuve esperando esto, pues muchas veces he sentido la necesidad de una aplicación de este tipo.

El Interactive Shell es un Shell que permite evaluar expresiones arbitrarias y que muestra el resultado en tiempo real a medida que vas escribiendo tu script.  Este Shell es sumamente útil si estamos realizando Debuging, probando cosas rápidamente, en fin, una herramienta muy poderosa.

Aquí les dejo algo para que vean de que se trata:

iphp is an interactive php shell that solves a number of painful problems with normal php shells:

  • Fatal Error handling – iphp doesn’t die even if your code does.
  • readline support
  • autocomplete support (tab key)
  • history support across runs
  • support ctags tags files
  • implemented as a class for integration with your framework
  • require support (supports dynamic includes)
  • autoload support

Example:

> new ArrayObject(array(1,2))
ArrayObject Object
(
[0] => 1
[1] => 2
)
> $_[0] + 1
2
Go to Top