加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何成功地将Zend Framework 1应用程序从CloudControl Lu

发布时间:2020-12-13 17:31:06 所属栏目:PHP教程 来源:网络整理
导读:简单的部分…… 通常在将ZF1应用程序从内置自动加载迁移到基于作曲家的自动加载时(强烈建议在CloudControls Pinky堆栈上部署),您只需采取一些简单的步骤: 创建一个composer.json文件,并要求Zend Framework(例如1.12版的最新版本): { "require" : { "zendfr
简单的部分……

通常在将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访问.正如文档所说,一切都应该在我们的部署框中:

The distributed nature of the cloudControl platform means it’s not
possible to SSH into the actual server. Instead,we offer the run
command,that allows you to launch a new container and connect to that
via SSH.

The container is identical to the web or worker containers but starts
an SSH daemon instead of one of the Procfile commands. It’s based on
the same stack image and deployment image and does also provides the
Add-on credentials.

让我们看看我们是否可以找到更多(从容器内部):

cd code/public
php index.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文档:

On a production server where the script files rarely change,a
significant performance boost can be achieved by disabled stats.

谢谢:

最后,我要感谢CloudControl的Dimitris和Mateusz提供的一般建议 – 尽管我需要自己了解这里发生了什么.此外,我要感谢Stack Overflow的@BullfrogBlues和@Thierry_Marianne,他们试图回答去年11月的另一个提问线程,最终指出我要寻找与APC相关的问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读