在openshift上运行php symfony ERR_CONTENT_DECODING_FAILED

时间:2014-12-08 02:37:59

标签: php apache .htaccess symfony openshift

我在openshift上有一个php 5.4设备,我可以运行我的wordpress安装。

然而,当我尝试部署我的symfony应用程序时,我得到Content Encoding Error,似乎html输出被破坏(尚未完成)。我尝试修改.htaccess文件以及在apache的httpd.conf上启用/禁用输出缓冲和/或输出压缩设置。这是curl的输出:

$ curl --compress --raw -i http://webfront-interiorpediadev.rhcloud.com
HTTP/1.1 200 OK
Date: Mon, 08 Dec 2014 01:52:30 GMT
Server: Apache/2.2.15 (Red Hat)
X-Pingback: http://webfront-interiorpediadev.rhcloud.com/xmlrpc.php
Cache-Control: no-cache
x-pingback: http://webfront-interiorpediadev.rhcloud.com/xmlrpc.php
vary: Accept-Encoding
content-encoding: gzip
accept-ranges: none
Content-Length: 20
X-Debug-Token: a9e740
X-Debug-Token-Link: /_profiler/a9e740
Content-Type: text/html; charset=UTF-8
Set-Cookie: PHPSESSID=gtarr5ls6tdcejdelrjrffr9p6; path=/
set-cookie: PHPSESSID=jtebjs0ihrdqhvo6f2gicq0rp0; path=/

<!DOCTYPE html>
<!--

我真的不知道为什么我没有收到整个html输出,Content-Length标题输出看起来很小,但谷歌搜索和php / apache文档说Content-Length标题不可靠gzip输出。

我已经调试了这个东西很长一段时间了,并且真的没有想法解决它。应用程序编码很好,因为我在开发过程中在本地主机上部署了完全相同的副本。任何想法都将受到高度赞赏。

以下是openshift上我的apache配置的phpinfo()输出:

phpinfo on openshift

1 个答案:

答案 0 :(得分:1)

将Symfony应用程序部署到Openshift的最佳方法是:

  1. 确保Syntfony2应用程序在localhost(dev和prod)中运行良好
  2. 您的项目必须使用git。
  3. 您的.gitignore文件忽略了供应商,缓存,引导程序,日志,作曲家等。
  4. 您已承诺每项待定更改。
  5. 你需要一个使用PHP 5.4的开放式装备和一个MySql 5.5的盒式磁带
  6. 您需要安装和配置rhc
  7. 将您的设备配置为公共分支releaserhc app-configure --deployment-branch release -a <app-name>
  8. 创建一个新的php文件,让MySQL访问您的应用程序:

  9. <?php
    # app/config/params.php
    if (getEnv("OPENSHIFT_APP_NAME")!='') {
        $container->setParameter('database_host', getEnv("OPENSHIFT_MYSQL_DB_HOST"));
        $container->setParameter('database_port', getEnv("OPENSHIFT_MYSQL_DB_PORT"));
        $container->setParameter('database_name', getEnv("OPENSHIFT_APP_NAME"));
        $container->setParameter('database_user', getEnv("OPENSHIFT_MYSQL_DB_USERNAME"));
        $container->setParameter('database_password', getEnv("OPENSHIFT_MYSQL_DB_PASSWORD"));
    }?>
    

    这将告诉应用程序,如果是openshift环境,则需要为不同的用户加载数据库

    1. 将此文件(params.php)导入app / config / config.yml文件:

    2. imports:
          - { resource: parameters.yml }
          - { resource: security.yml }
          - { resource: params.php }
      ...
      
      1. 提交您的更改。
      2. 创建一个新分支,将您的更改推送到Openshift:git checkout -b release
      3. 从openshift添加远程存储库:git remote add openshift -f <youropenshiftrepository.git>
      4. 合并两个存储库之间的差异git merge openshift/master -s recursive -X ours
      5. 在新文件夹“/.openshift/action-hooks”(创建添加openhift存储库时创建)创建一个'deploy'文件(推送应用后在openshift中执行的文件):

      6. #!/bin/bash
        
        # Symfony deploy
        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
        
        php $OPENSHIFT_REPO_DIR/app/console cache:clear --env=dev
        
        chmod -R 0777 $OPENSHIFT_REPO_DIR/app/cache
        chmod -R 0777 $OPENSHIFT_REPO_DIR/app/logs
        
        rm -r $OPENSHIFT_REPO_DIR/php
        ln -s $OPENSHIFT_REPO_DIR/web $OPENSHIFT_REPO_DIR/php
        
        rm -r $OPENSHIFT_REPO_DIR/php
        ln -s $OPENSHIFT_REPO_DIR/web $OPENSHIFT_REPO_DIR/php
        
        php $OPENSHIFT_REPO_DIR/app/console doctrine:schema:update --force
        
        1. 授予此文件执行权限。在Windows中:git update-index --chmod=+x .openshift/action_hooks/deploy在Linux和Mac中:chmod +x .openshift/action_hooks/deploy
        2. 将您的新文件添加到git项目并进行提交。
        3. 推送到openshift:git push openshift HEAD
        4. 您的控制台将向您显示正在处理的每一步。
        5. 回到你的主分公司。 git checkout master
        6. 然后,您可以继续正常工作,提交更改并转到release分支机构部署新的更改:git checkout release git merge master git push openshift HEAD {{1} }
        7. 这就是我使用Symfony和Openshift的方式。 (这些说明是我阅读的多种方式的混合,我对其进行了一些修改。对于我制作的每个应用程序都非常有效。