php - ¿Cómo ejecutar(o debo ejecutar) Composer en Openshift?
zend-framework2 composer-php (2)
Básicamente, necesita ejecutar la composer install
con cada compilación automáticamente en OpenShift.
Puede hacer esto agregando un archivo marcador llamado use_composer
en la carpeta .openshift/markers
.
.openshift/markers/use_composer
Referenciando: https://developers.openshift.com/en/php-markers.html
Si necesita hacer algo más que composer install
, como instalar Composer, usar action_hooks
es la mejor opción. Permiten trabajar con scripts bash.
Ver, https://developers.openshift.com/en/managing-action-hooks.html
.openshift/action_hooks/build
:
#!/bin/bash
export COMPOSER_HOME="$OPENSHIFT_DATA_DIR/.composer"
if [ ! -f "$OPENSHIFT_DATA_DIR/composer.phar" ]; then
curl -s https://getcomposer.org/installer | php -- --install-dir=$OPENSHIFT_DATA_DIR
else
php $OPENSHIFT_DATA_DIR/composer.phar self-update
fi
( unset GIT_DIR ; cd $OPENSHIFT_REPO_DIR ; php $OPENSHIFT_DATA_DIR/composer.phar install )
Estoy intentando crear la aplicación Skeleton de ZendFramework en Openshift. Creé una aplicación PHP5 usando estas instrucciones y la cloné localmente. Cloné la aplicación del esqueleto ZendFramework en el repositorio, luego ejecuté Composer para instalar dependencias localmente.
Luego empujé mi repositorio a Openshift, pero aparece el siguiente mensaje de error:
Fatal error: Uncaught exception ''RuntimeException'' with message
''Unable to load ZF2. Run `php composer.phar install`
or define a ZF2_PATH environment variable.'' in
/var/lib/openshift/559d4d8f500446844700002b/app-
root/runtime/repo/init_autoloader.php:51 Stack trace: #0
/var/lib/openshift/559d4d8f500446844700002b/app-
root/runtime/repo/public/index.php(18): require() #1 {main} thrown in
/var/lib/openshift/559d4d8f500446844700002b/app-
root/runtime/repo/init_autoloader.php on line 51
lo cual es indicativo de que necesito ejecutar Composer en Openshift. ¿Cómo logro esto?
En mi repositorio local, el directorio /vendor
está lleno de directorios de dependencia. Sin embargo, /vendor
se ignora en la confirmación. Podría intentar comprometerlo y presionarlo, pero ¿es esta la manera correcta de proceder? No se ve limpio.
La mejor forma de instalar dependencias es desde un gancho de acción, es decir, un script ejecutado por el cartucho durante la implementación. Yo usaría el gancho deploy
:
#!/bin/bash
# @file
# .openshift/action_hooks/deploy
COMPOSER_DIR="$OPENSHIFT_DATA_DIR/bin"
function install_composer() {
echo ''Installing Composer''
if [ ! -d "$COMPOSER_DIR" ]
then
mkdir -p $COMPOSER_DIR
fi
curl -s https://getcomposer.org/installer | php -- --install-dir=$COMPOSER_DIR
}
if [ ! -x "$COMPOSER_DIR/composer" ]
then
install_composer
fi
$COMPOSER_DIR/composer self-update
cd $OPENSHIFT_REPO_DIR
$COMPOSER_DIR/composer install
También recuerde hacer este script ejecutable: chmod +x .openshift/action_hooks/deploy
.