php – 如何成功地将Zend Framework 1应用程序从CloudControl Lu
简单的部分……
通常在将ZF1应用程序从内置自动加载迁移到基于作曲家的自动加载时(强烈建议在CloudControls Pinky堆栈上部署),您只需采取一些简单的步骤: 创建一个composer.json文件,并要求Zend Framework(例如1.12版的最新版本): { "require" : { "zendframework/zendframework1" : "1.12.*" } } 通过CLI安装composer依赖项: composer install 更新.gitignore文件并添加: vendor/* 从库路径中递归删除当前的ZF文件夹(例如./library): rm -r library/Zend 在使用Zend_类之前,在index.php中包含composer autoloader,方法是添加: $loader = include 'vendor/autoload.php'; 从index.php中删除每个现在过时的ZF相关require或require_once语句 – 例如这不再需要了: require_once 'Zend/Application.php'; 完成上述更改后,您可以正常提交并通过git推送,然后通过CLI在此处部署新版本的CloudControl(APP_NAME和DEP_NAME在此处引用您的应用和部署名称): cctrlapp APP_NAME/DEP_NAME deploy 您会注意到cctrlapp打印出一些有关解决作曲家依赖关系的信息,并最终启动新版本的部署.要检查是否已完成,您可以运行: cctrlapp APP_NAME/DEP_NAME log deploy 好的,部署日志看起来很好 – 很好 – 让我们打开浏览器吧! 什么f ***!内部服务器错误?为什么??一切都很好地与当地的LA(M)P堆栈! 解决方法
棘手的部分……
幸运的是,CloudControl还允许我们访问错误日志…… cctrlapp APP_NAME/DEP_NAME log error 不应该太难找出这里有什么问题. 但是……错了…… 8/1/14 5:23 AM error [error] [client ] FastCGI: incomplete headers (0 bytes) received from server "/app/php/box/php-fpm" 8/1/14 5:23 AM error [error] [client ] (104)Connection reset by peer: FastCGI: comm with server "/app/php/box/php-fpm" aborted: read failed 由于上述错误消息根本没有帮助,我们首先需要追踪这个错误.这确实很棘手!我们可以谷歌一点.我们可以尝试一下.然后我们可以重新部署.我们可以谷歌多一点.我们可以尝试另一件事.然后我们可以再次重新部署.我们可以再次google.我们可以尝试其他所有事情.我们可以…但我们想要吗? 幸运的是,Pinky堆栈提供了另一种加快速度的方法(Luigi并非全部).虽然它仍然包含繁琐的手动调试,但至少我们可以节省一些时间 – 转到CLI并执行: cctrlapp APP_NAME/DEP_NAME run bash CloudControl现在为我们实例化一个新容器,并为我们提供基于SSH的shell访问.正如文档所说,一切都应该在我们的部署框中:
让我们看看我们是否可以找到更多(从容器内部): cd code/public php index.php 嗯……这里没有报道……而且……日志上没有任何报道?!我勒个去?!! 所以,网络和运行容器之间似乎存在差异 – 而且有! vi index.php 过了一会儿我终于重现了至少另一个错误: 8/1/14 8:55 AM error [error] [client ] FastCGI: server "/app/php/box/php-fpm" stderr: PHP message: PHP Fatal error: require_once(): Failed opening required '' (include_path='/srv/www/code/vendor/zendframework/zendframework1/library:/srv/www/code/library:.:/usr/share/php') in /srv/www/code/vendor/zendframework/zendframework1/library/Zend/ ... 8/1/14 8:55 AM error [error] [client ] FastCGI: server "/app/php/box/php-fpm" stderr: PHP message: PHP Warning: require_once(/srv/www/code/vendor/zendframework/zendframework1/library): failed to open stream: No such file or directory in /srv/www/code/vendor/zendframework/zendframework1/library/Zend/ ... 看起来有些文件丢失 – 可能与自动加载有关 – 不应该太难修复它. 但是等等,那是什么:开放失败”?当然你没有要求你愚蠢的代码! 嗯…当查看相应的ZF库文件时,你不会发现任何错误.包含路径似乎也是正确的 – 是的,文件存在 – 作曲家正确地管理了两件事. 这是一个PHP错误! 更确切地说,它是PECL APC的一个错误,它影响了Pinky当前版本的PHP 5.4.30 / APC 3.1.13 – 请参阅: https://bugs.php.net/bug.php?id=62398 这正是运行和Web容器之间的区别,因为php.ini选项apc.stat对于Web容器设置为0(关闭),对于运行容器设置为1(打开). TL;博士 从GitHub克隆CloudControl Pinky PHP buildpack: git clone https://github.com/cloudControl/buildpack-php.git 从此存储库复制所有文件,并将它们添加到项目根文件夹中: .buildpack/php 编辑.buildpack / php / conf / php.ini并设置: apc.stat = 1 提交,推送,部署和享受! 笔记: 请记住,这只是一种解决方法,因为APC stat不需要在这样的环境中激活(在部署时重新创建堆栈)并且它会降低执行速度.请参阅PHP文档:
谢谢: 最后,我要感谢CloudControl的Dimitris和Mateusz提供的一般建议 – 尽管我需要自己了解这里发生了什么.此外,我要感谢Stack Overflow的@BullfrogBlues和@Thierry_Marianne,他们试图回答去年11月的另一个提问线程,最终指出我要寻找与APC相关的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
- 简单概括PHP的字符串中单引号与双引号的区别
- php生成的html meta和link标记在body标签里 顶部有个空行
- php – 通过composer安装Yii2失败
- 异常:org.hibernate.DuplicateMappingException处理方法
- Yii框架参数化查询中IN查询只能查询一个的解决方法
- php – 挂钩进入WordPress图片上传
- PHP – 使用session.use_trans_sid时会话ID更改
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区
- php入门级的PHP验证码程序