在Openshift上更新composer.phar

在Openshift上更新composer.phar,openshift,fuelphp,Openshift,Fuelphp,我有一个使用FuelPHP1.6.3用PHP编写的应用程序,希望将其部署在Openshift上 作为框架所需的编写器,当我在访问我的应用程序时,它显示了错误 未安装Composer。请在中运行“php composer.phar更新” 要安装Composer的根目录 我在谷歌上找到了一篇文章: 我尝试按照说明在文件夹中创建文件名deploy,并添加了以下内容: unset GIT_DIR cd $OPENSHIFT_REPO_DIR/libs wget -qN http://getcompose

我有一个使用FuelPHP1.6.3用PHP编写的应用程序,希望将其部署在Openshift上

作为框架所需的编写器,当我在访问我的应用程序时,它显示了错误

未安装Composer。请在中运行“php composer.phar更新” 要安装Composer的根目录

我在谷歌上找到了一篇文章: 我尝试按照说明在
文件夹中创建文件名deploy,并添加了以下内容:

unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar install
但它不起作用。我已尝试通过
update

unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar update
但一切都没有改变。
我在Openshift上使用PHP5.3盒式磁带,我明白了。使用openshift,我可以通过SSH访问并转到
approot(或类似的东西)/repo/php
,然后键入
/usr/bin/php composer.phar update
。就是这样。

当我更新composer时

cd app-root/runtime/repo/php
/usr/bin/php composer.phar update
我收到了这样的错误

[RuntimeException]                                                                                        
  /var/lib/openshift/52d3b7bd500446f4300001a5/.composer/cache/vcs does not exist and could not be created.
编写器以查找根路径。所以为了解决这个问题,我做了

export HOME=/var/lib/openshift/52d3b7bd500446f4300001a5/app-root/runtime/repo/php
然后

/usr/bin/php composer.phar update
成功了

更新完成后,我恢复$HOME

export HOME=/var/lib/openshift/52d3b7bd500446f4300001a5 
看起来openshift现在的工作方式有了一些变化。我知道这是一个相当丑陋的解决办法。如果我能找到更好的答案,我会更新这个答案。尽管如此,我还是希望这能帮助一些人


编辑

明白了!:)

在.openshift目录下创建新文件:

.openshift/action_hooks/deploy
并将其标记为可执行文件

#!/bin/bash
# Run composer install

cd app-root/runtime/repo/php

export HOME_ORIGIN=$HOME
export HOME=$HOME/app-root/runtime/repo/php

/usr/bin/php composer.phar install

export HOME=$HOME_ORIGIN
之后,每个push composer将更新为当前composer.lock位置。太好了!:)


还要确保供应商/路径为空。最好添加到.gitignore,这样它就不会被您的本地设置搞砸。

我没有足够的分数对答案进行评论,所以我将把它附加到这里:

OpenShift需要更新zend/php-*/etc/php.ini文件,才能使用最新版本的composer.phar,如下所示:

添加这些扩展可以修复PHP对composer.phar的抱怨


使用相对路径所需的下一个修复:

php composer.phar install
/usr/bin/php composer.phar install
而不是绝对路径:

php composer.phar install
/usr/bin/php composer.phar install

允许加载扩展。

这里有一个比前面提到的其他解决方案略好的解决方案:

博客帖子中提到的部署脚本:
A.下载composer(如果不存在),并将其存储在数据目录中,以便其持续存在 跨git推送
B使composer能够使用存储在持久数据目录中的.composer目录中的包的缓存版本,从而减少频繁推送所需的时间

脚本有一个小问题——它所指的php版本被composer抱怨为太旧

remote: #!/usr/bin/env php
remote: Some settings on your machine may cause stability issues with Composer.
remote: If you encounter issues, try to change the following:
remote:
remote: Your PHP (5.3.3) is quite old, upgrading to PHP 5.3.4 or higher is recommended.
remote: Composer works with 5.3.2+ for most people, but there might be edge case issues.
因此,我更改了路径以使用系统上的最新版本

[domain.rhcloud.com action_hooks]\> php --version  
PHP 5.4.16 (cli) (built: Dec  6 2013 01:17:01)  
[domain.rhcloud.com 5316aa83e0b8cdb61b00023a]\> which php  
/opt/rh/php54/root/usr/bin/php
my.openshift/action\u hooks/deploy中的脚本是

#!/bin/bash
# Run composer install

cd app-root/runtime/repo/
export COMPOSER_HOME="$OPENSHIFT_DATA_DIR/.composer"
if [ ! -f "$OPENSHIFT_DATA_DIR/composer.phar" ]; then
    curl -s https://getcomposer.org/installer | /opt/rh/php54/root/usr/bin/php -- --install-dir=$OPENSHIFT_DATA_DIR
else
    /opt/rh/php54/root/usr/bin/php $OPENSHIFT_DATA_DIR/composer.phar self-update
fi

( unset GIT_DIR ; cd $OPENSHIFT_REPO_DIR ; /opt/rh/php54/root/usr/bin/php $OPENSHIFT_DATA_DIR/composer.phar install )
正如博文所建议的,在markers子目录中创建一个空的hot_deploy文件,通过说在推送过程中不应重新启动服务器来进一步加快速度

touch .openshift/markers/hot_deploy
git add .openshift/markers/hot_deploy
git add .openshift/action_hooks/deploy
git commit -m "Speeding up composer installs across pushes"
git push origin master

即使在使用composer时,也要注意git的推送速度。

作为参考,OpenShift内置了对composer的支持。在OpenShift项目的
目录中添加
use\u composer
,即名为
use\u composer
的空文件。OpenShift/markers
目录将在部署时自动启用composer安装/更新

更具体地说,每次您
git推送
到OpenShift git repo

处于“生产”模式时(默认):

处于“开发”模式时:

if [ -f ${OPENSHIFT_REPO_DIR}composer.lock ]; then
    echo "Ignoring composer.lock file (development mode)"
fi
echo -n "Checking composer.json for Composer dependency... "
if [ -f ${OPENSHIFT_REPO_DIR}composer.json ]; then
    echo
    composer update --no-interaction --no-ansi --no-scripts --optimize-autoloader --working-dir=${OPENSHIFT_REPO_DIR}
    echo -e $composer_lock_msg
else
    echo "File not found."
fi
检查从开始的代码

有关更多详细信息,请参阅上的开发人员门户文章


查看示例use or(使用或)以获得入门的简单方法。

我选择这个答案作为最佳答案,因为它既描述了一个正确的解决方案,又讲述了openshift中的操作挂钩。当openshift不支持公开端口22时,您可以通过ssh连接到openshift吗?只有oc rsh命令和默认的随机UID?