在Openshift上更新composer.phar

时间:2013-08-07 03:13:21

标签: openshift fuelphp

我有一个使用Fuelphp 1.6.3用PHP编写的应用程序,并希望在Openshift上部署它

由于框架需要编辑器,当我在http://audit-manhthang.rhcloud.com/public/访问我的应用时,它显示错误

  

未安装Composer。请运行“php composer.phar update”   安装Composer的根

我有Google,并在此处找到了一篇文章:https://www.openshift.com/content/support-for-git-clone-on-the-server-aka-support-php-composerphar 我已尝试按照说明操作,在.openshift/action_hooks文件夹中创建文件名deploy并添加以下内容:

unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar install

但它不起作用。我试图通过install

修改update
unset GIT_DIR
cd $OPENSHIFT_REPO_DIR/libs
wget -qN http://getcomposer.org/composer.phar
php composer.phar update

但没有变化。 我在Openshift上使用PHP 5.3 Cartridge

5 个答案:

答案 0 :(得分:4)

当我做作曲家更新时

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.

Composer is using $HOME variable找到根路径。所以要解决我的问题。

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

然后

/usr/bin/php composer.phar update

的工作。

更新完成后,我还原了$ HOME

export HOME=/var/lib/openshift/52d3b7bd500446f4300001a5 

看起来openhift现在有些变化。我知道这是一个非常丑陋的解决方法。如果我能找到更好的东西,我会更新这个答案。不过,希望这会对某人有所帮助。


修改

知道了! :)

在.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

之后,每个推送作曲家都会更新到当前的composer.lock位置。完善! :)

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

答案 1 :(得分:2)

这是一个比其他人提到的更好的解决方案: http://stanlemon.net/2013/03/22/composer-on-openshift/

博文中提到的部署脚本:
一个。下载composer(如果不存在)并将其存储在数据目录中以便它保持不变 穿过git推动
湾使composer能够使用存储在持久数据目录中的.composer目录中的缓存版本的包,从而减少频繁推送时所需的时间

脚本存在一个小问题 - 它所指的php版本被作曲家抱怨太老了

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

我的.openshift / action_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

即使使用作曲家,也要注意你的git推得快。

答案 2 :(得分:1)

我明白了。使用openshift,我可以通过SSH访问并转到app-root(or something like that)/repo/php,然后键入/usr/bin/php composer.phar update。就是这样。

答案 3 :(得分:1)

作为参考,OpenShift内置了对Composer的支持。在OpenShift项目的use_composer目录中添加use_composer marker file,只是一个名为.openshift/markers的空文件,将自动启用部署时的Composer安装/更新。

更具体地说,每次git push到您的OpenShift git repo ...

进入'生产'模式(默认):

echo -n "Checking composer.json for Composer dependency... "
if [ -f ${OPENSHIFT_REPO_DIR}composer.json ]; then
    echo
    composer install --no-interaction --no-ansi --no-scripts --optimize-autoloader --working-dir=${OPENSHIFT_REPO_DIR} || \
    echo -e "\nSkipping Composer errors..\n\n  Please, fix the errors either locally or in development mode.\n"
    if [ ! -f ${OPENSHIFT_REPO_DIR}composer.lock ]; then
        echo -e $composer_lock_msg
    fi
else
    echo "File not found."
fi

进入'开发'模式:

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

查看从line #142 of the OpenShift PHP Cartridge开始的代码。

查看enabling PHP 'development' mode上的Developer Portal文章了解更多详情。

查看Laravel 5 QuickStart示例使用或简单的入门方法。

答案 4 :(得分:0)

我没有足够的观点对wormhit's的答案发表评论,所以我会在此处附上:

zend / php - * / etc / php.ini 文件需要更新OpenShift以使用最新版本的composer.phar作为described here

extension=phar.so
extension=ctype.so

添加这些扩展可修复PHP对composer.phar

的抱怨


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

php composer.phar install

绝对路径的INSTEAD:

/usr/bin/php composer.phar install

允许加载扩展程序。