【问题标题】:Update composer.phar on Openshift在 Openshift 上更新 composer.phar
【发布时间】:2013-08-08 06:37:13
【问题描述】:

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

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

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

我在谷歌上找到了一篇文章: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

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

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

但没有任何改变。 我在 Openshift 上使用 PHP 5.3 墨盒

【问题讨论】:

    标签: openshift fuelphp


    【解决方案1】:

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

    【讨论】:

    • 当 openshift 不支持暴露 22 端口,只支持默认随机 UID 的 oc rsh 命令时,如何 ssh 到 openshift?
    【解决方案2】:

    当我更新作曲家时

    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 
    

    现在 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 位置。完美的! :)

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

    【讨论】:

      【解决方案3】:

      我没有足够的积分来评论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
      

      代替绝对路径:

      /usr/bin/php composer.phar install
      

      允许加载扩展。

      【讨论】:

        【解决方案4】:

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

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

        正如博文所建议的那样 - 在标记子目录中创建一个空的 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 中的动作挂钩
        【解决方案5】:

        作为参考,OpenShift 内置了对 Composer 的支持。在 OpenShift 项目的 .openshift/markers 目录中添加 use_composer marker file,只需一个名为 use_composer 的空文件,将自动启用 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 上的开发者门户文章了解更多详情。

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

        【讨论】:

          猜你喜欢
          • 2014-01-26
          • 2016-01-17
          • 2015-05-15
          • 1970-01-01
          • 2015-02-26
          • 2015-04-26
          • 1970-01-01
          • 2015-09-10
          • 1970-01-01
          相关资源
          最近更新 更多