SIU-Toba / framework

Framework para desarrollo rápido de aplicaciones web
http://toba.siu.edu.ar
21 stars 24 forks source link

Utilizar composer como ejecutador de comandos #6

Closed lgraziani2712 closed 7 years ago

lgraziani2712 commented 7 years ago

En vez de agregar al path la ubicación del bin de toba de un proyecto en particular, sería un mejor enfoque que fuera posible ejecutar el siguiente comando:

composer toba 

Sin embargo, actualmente no es posible. Al menos el comando composer toba instalacion instalar no funciona, se la pasa escupiendo (s/n): eternamente.

Gracias!

enfoqueNativo commented 7 years ago

Hola Luciano, suponiendo que dicho plugin existiera y se pudiera utilizar composer como lanzador, en caso de tener múltiples instalaciones aún debería especificar cual de todos los directorios "bin" deseo utilizar no?, de lo contrario podría ejecutar los comandos sobre otra instalación.

Saludos

lgraziani2712 commented 7 years ago

@enfoqueNativo En cuanto a múltiples instalaciones entiendo esto:

  1. Estando en la carpeta ~/toba-proyecto-1, ejecutar el comando composer toba xxxx afectaría a dicho proyecto.
  2. Lo mismo se aplica con el ~/toba-proyecto-2.

Es decir, que el comando sería local, en vez de necesitar una referencia en el path del sistema.

suponiendo que dicho plugin existiera

No entiendo a qué te referís como plugin.

enfoqueNativo commented 7 years ago

@lgraziani2712 Entiendo tu punto.. pero no veo la ventaja.

En ninguno de los casos es requerido referenciar la variable PATH, ojo que conveniencia no es lo mismo que requerimiento. Se agregan todas esas variables a un archivo de entorno por conveniencia, para poder trabajar sobre los proyectos desde cualquier parte del FS y tipeando menos parametros.

Por otra parte, no estariamos ahorrando nada ya que composer hace lo mismo

Lo del plugin venia a titulo de tener un instalador propio que ignorara el de composer.

andres-blanco commented 7 years ago

Para mi tiene algo raro que al ejecutar bin/toba no esté asociado a la instancia donde está ese ejecutable.

@lgraziani2712 El problema no se soluciona ejecutando composer toba porque tiene que haber unas variables de entorno definidas que están en la carpeta de instalación de toba (entorno_toba.env)

Estuve pensando y una fácil que se puede hacer para resolver esto:

De esa manera se haría la carga del entorno correcto cada vez que se ejecuta el comando y logramos el comportamiento (razonable) que explica @lgraziani2712 más arriba. "El bin/toba de un directorio carga el proyecto de ese directorio"

Si querés setear un toba "global" metés el bin/toba correspondiente en el PATH y listo.

Como la ves @enfoqueNativo ?

lgraziani2712 commented 7 years ago

@enfoqueNativo Perdón, no quise decir de crear un plugin que reemplazara a composer. Sino que ejecutar toba vía composer asignando un script dentro de la configuración de composer falla:

{
  "scripts": {
    "toba": "toba"
  },
  // el resto de la configuración recomendada
}

Cuando trato de ejecutar composer toba instalacion instalar, se la pasa imprimiendo en (s/n):.

Pero cuando ejecuté el bat directamente desde la terminal como dijiste (vendor/bin/toba.bat instalacion instalar) funciona adecuadamente.

Como fix temporal hice un alias toba=vendor/bin/toba.bat $*, y evito el uso de un path global 👍

Me sumo a la idea de @andres-blanco! Poder utilizar un archivo env dentro de la raíz del proyecto sería genial.

Gracias!

andres-blanco commented 7 years ago

Pensándolo mejor, que no sea un php ese archivo, que sea un archivo de entorno común para poder levantarlo con esta librería https://github.com/vlucas/phpdotenv. Si además se agrega ese archivo al bin del composer de toba podemos facilitar el acceso a información de instalación del proyecto toba en cuestión desde entornos no toba.

enfoqueNativo commented 7 years ago

@andres-blanco Dejar algo en el bin de toba no se puede, cuando composer actualiza la version vuela todo. La alternativa es la carpeta bin del proyecto.. pero esta al mismo nivel que la de instalación, osea que es practicamente lo mismo. Voy a mirar lo de phpdotenv a ver que onda, por ahi con eso ya estamos.

@lgraziani2712 No problem, la declaracion en el json puede funcar, aunque me parece que tendrias que declararlo asi:

{
  "scripts": {
    "toba": "bin/toba"
  }
}

Por otro lado, veo que estas lanzando el comando desde la carpeta vendor, supongo que tu proyecto no tiene una carpeta ''bin'' de lo contrario te habria quedado el symlink ahi dentro.

sergiovier commented 7 years ago

#2036

editado!

andres-blanco commented 7 years ago

Dejar algo en el bin de toba no se puede, cuando composer actualiza la version vuela todo.

Tenés razón, se me pasó

La alternativa es la carpeta bin del proyecto.. pero esta al mismo nivel que la de instalación, osea que es practicamente lo mismo. Voy a mirar lo de phpdotenv a ver que onda, por ahi con eso ya estamos.

otra es dejar el entorno_toba.env en la raíz del proyecto? el comando toba ya está levantando el dir del proyecto. Lo que habría que hacer es levantar el entorno_toba.env (puede ser con phpdotenv) de ahí. De esa manera evitamos tener que cargar manualmente las variables de entorno para invocar a toba.

@sergiovier el link da 404!

lgraziani2712 commented 7 years ago

@enfoqueNativo:

Por otro lado, veo que estas lanzando el comando desde la carpeta vendor, supongo que tu proyecto no tiene una carpeta ''bin'' de lo contrario te habria quedado el symlink ahi dentro.

Uhm... ¿Pero está bien, no? Composer instaló toba dentro de la carpeta vendor, y ahí dentro instaló el bin de toba.

enfoqueNativo commented 7 years ago

@sergiovier Lastima que lo dejaron de lado, de todas maneras eso convertiria a composer de un simple manejador de paquetes en algo mas. Además, el proceso de instalación debería modificar cosas en el archivo del proyecto... medio confuso queda.

@lgraziani2712 No está mal, solo digo que te podría haber quedado mas sencillo el acceso teniendo una carpeta "bin" en el árbol del proyecto.

@andres-blanco En realidad el comando levanta el dir de toba, no del proyecto. Incluso cuando composer deja el symlink, el directorio de ejecucion esta dentro del bin de toba. Lo que se podría hacer es volver una cantidad X de dirs hacia atrás, ya que tampoco sabemos el dir del proyecto en ese punto y levantarlo de ahi. No me pinta mucho agregar archivos sueltos a la carpeta del proyecto.. pero la carpeta "instalacion" puede estar en cualquier parte del disco.

andres-blanco commented 7 years ago

@enfoqueNativo si tirás esto

DIR="$(cd "$(dirname "$0")" && pwd)"

dentro de un script te tira el path del symlink, no del path real. Capaz que se zafa

Desde php se puede obtener el path requerido así: https://stackoverflow.com/a/10526123/598694

enfoqueNativo commented 7 years ago

Lo paso a otro issue [#7] asi esto queda para definir la parte de composer como lanzador. Sigue teniendo sentido?.. en que caso?