如何在 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?