2

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

由于框架需要作曲家,当我在http://audit-manhthang.rhcloud.com/public/访问我的应用程序时,它显示了错误

未安装作曲家。请在根目录下运行“php composer.phar update”来安装 Composer

我在谷歌上找到了一篇文章:https : //www.openshift.com/content/support-for-git-clone-on-the-server-aka-support-php-composerphar指令,在文件夹中创建文件名 deploy.openshift/action_hooks并添加以下内容:

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 墨盒

4

5 回答 5

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使用 $HOME 变量来查找根路径。所以要解决这个问题。

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

之后,每次推送 composer 都会更新到当前 composer.lock 位置。完美的!:)

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

于 2014-01-13T20:49:34.233 回答
2

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

博文中提到的部署脚本
:如果没有作曲家,则下载作曲家并将其存储在数据目录中,以便它在 git pushs 中持续存在
b. 使 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 )

正如博客文章所建议的那样 - 在标记子目录中创建一个空的 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 推送速度很快。

于 2014-03-06T07:27:46.393 回答
1

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

于 2013-08-14T09:40:53.963 回答
1

作为参考,OpenShift 带有对 Composer 的内置支持。在您的 OpenShift 项目目录中添加use_composer 标记文件(只需一个名为 的空文件)将自动启用 Composer 在部署时安装/更新。use_composer.openshift/markers

更具体地说,每次您git push访问 OpenShift git 存储库时...

在“生产”模式下(默认):

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

查看从OpenShift PHP Cartridge 的第 142 行开始的代码。

查看有关启用 PHP“开发”模式的开发人员门户文章以获取更多详细信息。

查看Laravel 5 快速入门以获取示例使用或简单的入门方法。

于 2015-03-20T12:25:08.720 回答
0

我没有足够的分数来评论wormhit 的答案,所以我将在此处附加:

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

extension=phar.so
extension=ctype.so

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


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

php composer.phar install

代替绝对路径:

/usr/bin/php composer.phar install

以允许加载扩展。

于 2014-03-04T01:45:27.203 回答