在OpenShift上部署yii应用程序时出现CException错误?

nkhmeac6  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(148)

朋友们,我尝试将我的yii生产应用程序从cloud9 IDE部署到OpenShift,同时这样做,我得到了这个错误消息,

CException

应用程序运行时路径“/var/lib/openshift/51 dd 48794382 ecfd 530001 e8/app-root/runtime/repo/php/protected/runtime”无效。请确保它是Web服务器进程可写入的目录。
即使当我在Cloud9 IDE上将文件夹权限更改为775(chmod -R 775 directory)并再次部署时,也会出现同样的错误。

xdyibdwo

xdyibdwo1#

这是一个老问题,但我最近刚刚遇到了同样的问题。
当你解压缩“yii”包时,有几个文件夹是空的,“framework/protected/runtime”就是其中之一。
要部署到OpenShift,你需要将yii包提交到git,然后将提交推送到操作系统。但是,git不会提交空文件夹,所以它们不会在你的部署中创建。你需要在这些文件夹中创建一些文件,并在提交/推送之前将这些文件添加到你的git repo中。通常的步骤是将一个“.gitkeep”文件添加到这些文件夹(这只是一个空的虚拟文件,所以git会看到这些文件夹)。
这将修复这个特定的错误。

yqkkidmi

yqkkidmi2#

这可能是由于所有权给予文件夹。检查Web服务器用户组,是该目录是可写的或没有,也是什么影响Web服务器时,我们改变了平台。
希望我的建议对你有用。

ej83mcc0

ej83mcc03#

对于Yii应用程序,assets和protected/runtime文件夹是特殊的。首先,这两个文件夹必须存在,并且可以被服务器(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部署后在每个gear上创建临时文件夹。默认情况下,新目录的权限是u+rwx,并且它可以被httpd进程写入,因为gear以gear用户(而不是apache或其他东西)的身份运行httpd。

相关问题