我在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
Symfony应用程序部署到Openshift的最佳方法是:
- 确保你有一个Symfony2应用程序在本地主机中运行良好(开发和生产(
- 你的项目必须使用 git。
- 您的 .gitignore 文件忽略了供应商、缓存、引导程序、日志、作曲家等。
- 您已提交所有待处理的更改。
- 您需要一个使用 PHP 5.4 的开档齿轮和一个 MySql 5.5 的墨盒
- 您需要安装和配置 rhc
- 配置你的装备以公开一个名为
release
:rhc app-configure --deployment-branch release -a <app-name>
的分支 - 创建一个新的 php 文件,使 MySQL 能够访问您的应用程序:
<?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 环境,它需要加载不同的用户数据库
- 将此文件 (params.php( 导入到您的 app/config/config.yml 文件中:
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: params.php }
...
- 提交更改。
- 创建一个新分支,将您的更改推送到 Openshift:
git checkout -b release
- 从 openshift:
git remote add openshift -f <youropenshiftrepository.git>
添加您的远程存储库 - 合并两个存储库之间的差异
git merge openshift/master -s recursive -X ours
在新 - 文件夹"/.openshift/action-hooks"(添加 openshift 存储库时创建(中创建一个"部署"文件(推送应用程序后在 openshift 中执行的文件(:
#!/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
- 授予此文件的执行权限。在窗口中:
git update-index --chmod=+x .openshift/action_hooks/deploy
在 Linux 和 Mac 中:chmod +x .openshift/action_hooks/deploy
- 将新文件添加到 git 项目并进行提交。
- 按压到开移:
git push openshift HEAD
- 您的主机将显示它正在处理的每个步骤。
- 回到您的主分支。
git checkout master
- 然后,您可以继续在项目上正常工作,提交更改并移动到分支
release
以部署新更改:git checkout release
git merge master
git push openshift HEAD
git checkout master
这就是我与Symfony和Openshift合作的方式。(这些说明是我阅读的许多方式的混合,我进行了一些更改。它适用于我制作的每个应用程序。