【问题标题】:CException Error while deploying yii application on OpenShift?在 OpenShift 上部署 yii 应用程序时出现 CException 错误?
【发布时间】:2013-07-10 12:22:33
【问题描述】:
朋友们,我尝试将我的 yii 生产应用程序从 cloud9 IDE 部署到 OpenShift 时,我收到了这个错误消息,
CException
应用程序运行时路径“/var/lib/openshift/51dd48794382ecfd530001e8/app-root/runtime/repo/php/protected/runtime”无效。请确保它是 Web 服务器进程可写的目录。
即使我在 Cloud9 IDE 上将文件夹权限更改为 775 (chmod -R 775 directory) 并再次部署,但出现同样的错误。
【问题讨论】:
标签:
yii
file-permissions
openshift
cloud9-ide
【解决方案1】:
这是一个老问题,但我最近才遇到同样的问题。
当您提取“yii”包时,有几个文件夹是空的,“framework/protected/runtime”就是其中之一。
要部署到 OpenShift,您需要将 yii 包提交到 git,然后将提交推送到 OS。但是,git 不会提交空文件夹,因此它们不会在您的部署中创建。在提交/推送之前,您需要在这些文件夹中创建一些文件并将这些文件添加到您的 git 存储库中。通常的过程是在这些文件夹中添加一个“.gitkeep”文件(它只是一个空的虚拟文件,所以 git 会看到这些文件夹)。
这将解决这个特定的错误。
【解决方案2】:
这可能是由于文件夹的所有权。
检查网络服务器用户组,该目录是否可写,以及当我们更改平台时对网络服务器有何影响。
希望我的建议对你有用。
【解决方案3】:
对于 Yii 应用程序,资产和受保护/运行时文件夹是特殊的。首先,这两个文件夹都必须存在并且可由服务器 (httpd) 进程写入。其次,这两个文件夹包含临时文件,应该被 git 忽略。如果这些临时文件被提交,在普通服务器(不是 Openshift 服务器)中部署会导致 git 合并冲突。所以我把这两个文件夹放在 .gitignore 中:
php/assets/
php/protected/runtime/
在我的部署中,我添加了一个由 openshift 调用的 shell 脚本,在 $OPENSHIFT_DATA_DIR 下创建两个文件夹,并在应用程序的文件夹中创建指向它们的符号链接。这是我改编自 here 的 shell 脚本 (.openshift/action_hooks/deploy) 的内容:
#!/bin/bash
if [ ! -d $OPENSHIFT_DATA_DIR/runtime ]; then
mkdir $OPENSHIFT_DATA_DIR/runtime
fi
# remove symlink if already exists, fix problem when with gears > 1 and nodes > 1
rm $OPENSHIFT_REPO_DIR/php/protected/runtime
ln -sf $OPENSHIFT_DATA_DIR/runtime $OPENSHIFT_REPO_DIR/php/protected/runtime
if [ ! -d $OPENSHIFT_DATA_DIR/assets ]; then
mkdir $OPENSHIFT_DATA_DIR/assets
fi
rm $OPENSHIFT_REPO_DIR/php/assets
ln -sf $OPENSHIFT_DATA_DIR/assets $OPENSHIFT_REPO_DIR/php/assets
shell 脚本确保在 openshift 部署后在每个齿轮上创建临时文件夹。默认情况下,新目录的权限是 u+rwx,并且它可以被 httpd 进程写入,因为 gear 以 gear 用户(而不是 apache 或其他)运行 httpd。