如何在 Openshift 上运行(或者我应该运行)Composer?

Posted

技术标签:

【中文标题】如何在 Openshift 上运行(或者我应该运行)Composer?【英文标题】:How to run (or should I run) Composer on Openshift? 【发布时间】:2015-10-07 01:16:24 【问题描述】:

我正在尝试在 Openshift 上创建 ZendFramework 的 Skeleton 应用程序。我已经使用这些instructions 创建了一个 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

这表明我需要在 Openshift 上运行 Composer。我如何做到这一点?

在我的本地存储库中,/vendor 目录充满了依赖目录。但是,/vendor 在提交中被忽略。我可以尝试提交并推送它,但这是正确的方法吗?它看起来不干净。

【问题讨论】:

您不能通过 ssh 登录并在其中运行 composer install 吗?那将是正确的方式:) 我可以试试,但不会自动... 【参考方案1】:

基本上,您需要在 OpenShift 上自动执行每个构建的 composer install

您可以在文件夹.openshift/markers 中添加一个名为use_composer 的标记文件。

.openshift/markers/use_composer

参考:https://developers.openshift.com/en/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 )

【讨论】:

我已经添加了标记,但是 Composer 没有执行。可能是因为这个 DYI 墨盒上没有安装它……呜呜…… 我创建了一个增强请求:github.com/laobubu/openshift-php5.5-cgi-apache/issues/2 添加了一个 bash 脚本,用于作为 action_hook 下载和执行 Composer。 它几乎可以工作了,但我面临 php 版本问题。我打开了另一个问题:***.com/questions/31478610/… 是的,屏幕截图显示 Composer 正在 OpenShift 上运行。很高兴你解决了这个问题。【参考方案2】:

安装依赖项的最佳方式是使用操作挂钩,即在部署期间由盒式磁带运行的脚本。我会使用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

【讨论】:

以上是关于如何在 Openshift 上运行(或者我应该运行)Composer?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Openshift平台上通过Jenkins管道运行docker-in-docker?

如何在OpenShift中运行pgAdmin?

在 openshift 上部署 Ninjaframework 应用程序

git 在 openshift 服务器上提交更改

使用 OpenShift 的公共客户端应用程序端口转发

openshift基础概念