Я пытаюсь создать приложение Skeleton ZendFramework в Openshift. Я создал приложение PHP5, используя эти инструкции, и клонировал его локально. Я клонировал приложение скелета ZendFramework в репозитории, а затем запустил Composer для установки зависимостей локально.
Затем я нажал мой репозиторий на Openshift, но я получил следующее сообщение об ошибке:
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
что свидетельствует о том, что мне нужно запустить Composer on Openshift. Как мне это достичь?
В моем локальном репозитории каталог /vendor
заполняется каталогами зависимостей. Тем не менее, /vendor
игнорируется в commit. Я мог бы попытаться совершить и подтолкнуть его, но это правильный путь? Это не выглядит чистым.
В принципе, вам необходимо выполнить composer install
с каждой строкой автоматически на OpenShift.
Вы можете сделать это, добавив файл-маркер с именем use_composer
в папку .openshift/markers
.
.openshift/markers/use_composer
Ссылка: https://developers.openshift.com/ru/php-markers.html
Если вам нужно сделать больше, чем просто composer install
, например, установить Composer, использование action_hooks
– лучший выбор. Они позволяют работать с скриптами bash.
См. 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 )
Наилучший способ установки зависимостей – это действие, связанное с действием, то есть сценарий, выполняемый картриджем во время развертывания. Я бы использовал крюк 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
Также не забудьте сделать этот скрипт исполняемым: chmod +x .openshift/action_hooks/deploy
.