
开发机器目前用的是 Win10 ,写项目用的 PHPStrom , XShell 连接 Linux , Xftp 打包上传网站(快换 Git 了...)。
本地开发 nginx+apache+php+mysql 等版本都比较新,但是服务器端的整个 LNMPA 的版本都不高。
某些项目在这种差异下几乎没有影响,但是最近服务器环境比较复杂[1]后,本地测试无误后的 PHP 项目上传到服务器上后很多地方出现 500 ,甚至 404[2],路径出错等。
请问你们 怎么避免 这种问题?以及遇到这种问题的时候 如何快速解决 的?
或者分享一下你们的不错的 开发&部署 方案? 以及其他 建议?
必须让开发环境和线上环境完全一致吗?
[1] 环境复杂 指的是服务器上使用还有 Java 等项目,目前的解决办法是前台使用 Nginx 反向代理,后端 PHP 依然使用 Apahce 。
[2] 404 的问题会受服务器网络速度影响。(公司服务器速度不行...)
1 b821025551b 2016 年 3 月 30 日 首先统一 php 版本 |
2 Mush 2016 年 3 月 30 日 docker 大法好 |
3 ersic 2016 年 3 月 30 日 环境一致还经常出错呢,别说环境不一致了,我就经常犯大小写的错误. |
4 SpicyCat 2016 年 3 月 30 日 看你描述都觉得蛋疼。环境问题能解决就不错了,快速解决更可遇不可求。 开发环境和线上环境最好一致,不然你会遇到无穷无尽的奇怪问题。 |
5 lecher 2016 年 3 月 30 日 看报错看报错,没有报错日志是查不出来问题的。 一般 win 下面的文件大小写是不区分的,而 linux 对文件有绝对的大小写区分,所以如果有 windows 下面开发的代码,文件名的命名规范一定要统一好,偷懒就用全小写,不然到线上,为一个大小写的区别, linux 报找不到文件是常有的事。 线下开发环境搭建一个与线上一致的版本是必须的,至少在上线之前代码放到与线上环境一致的测试环境跑一遍测一测。 如果线上出问题了,第一反应应该回滚代码,然后把错误日志找出来诊断原因。 docker 大法确实好,在线上部署对运维能力要求高,但是确实很省开发人员搭建环境的时间。运维把配置脚本写好,开发把需要的安装文件和脚本 copy 过去,运行一下就可以把环境拉起来。 |
6 Orzzzz 2016 年 3 月 30 日 Docker 大法好 |
8 lightening 2016 年 3 月 30 日 看你要一致到何种程度,以及要方便到什么程度。 难道你连一个 staging 环境都没有吗? |
9 lamCJ OP @b821025551b 我很想,但是服务器上的版本( CentOS5.11+nginx0.8.55+apache2.2.3+mysql5.09+php5.42 )不是我说了算的,而我本地又想用比较新的开发环境。。 (刚偷偷升级 PHP 至 5.6...) |
11 UnisandK 2016 年 3 月 30 日 PHPStrom 可以用远程服务器的 php 版本来调试的,本地要搭开发环境肯定是尽量和服务器保持一致 |
12 lamCJ OP |
13 lhbc 2016 年 3 月 30 日 “[2] 404 的问题会受服务器网络速度影响。(公司服务器速度不行...)” 这是什么鬼…… |
15 lamCJ OP @lightening 当然是少出现 500 404 之类最好了。目前没有走这么标准的流程,你们都有的吗?我才工作不久,这些不是很懂,貌似上面也没这样要求过 |
18 SpicyCat 2016 年 3 月 30 日 可以本地用 docker 装个跟线上一样的开发环境,然后代码文件用 volume 挂载。 |
19 damonzheng 2016 年 3 月 30 日 一定是跟我们一样什么东西都扔在一个 OS 上 |
20 lightening 2016 年 3 月 30 日 @lamCJ 对。我认为你现在开个 staging 环境,和 production 完全保证一致。并且把本地用的依赖版本都换成和生产环境一样,暂时够用了。 本地版本都和 production 不一样真是闷声作大死。你目前貌似还不需要用 docker 等工具来达到 100% 一致,但保证各种依赖版本一致实在是太基本的需求了。 |
22 lightening 2016 年 3 月 30 日 @lamCJ 那你应该升级服务器环境了。要么自己学习低版本,要么升级服务器的 php 。 |
23 lamCJ OP @lightening 你们是怎么搭建 staging 环境的呢?(是如果服务器是 centos5.11 那我也得去下载一个 centos5.11 然后在虚拟机里面跑 php 这些,这样吗?) |
24 lightening 2016 年 3 月 30 日 @lamCJ 买一个一模一样的服务器,装一模一样的软件。 |
25 lightening 2016 年 3 月 30 日 @lamCJ 也用(几乎)一模一样的部署方法(可能就域名不一样,另外数据是假的)。每次要先部署到 staging 测试一下,然后再部署到 production 。 |
26 lamCJ OP @lightening 懂了~ 谢谢 |
28 lamCJ OP @lhbc 那我也解释不了了,反正现象就是如果在审查工具中看状态码就是 404 ,而直接访问图片 url 却可以看到... 就是这样: 我也觉得奇怪... 所以我猜可能就是网络不行 |
29 dishuibaby 2016 年 3 月 30 日 我们是线下有一套与线上代码一致的测试环境。代码放到 svn ,然后开在测试机进行调试。你这样子系统不一致、各种版本不一致。肯定会出问题的。我们现在环境一致,都经常上线的时候出错。紧急回滚。 |
30 zaishanfeng 2016 年 3 月 30 日 via Android 镜像线上环境 |
31 wweir 2016 年 3 月 30 日 开发测试环境通过 docker 统一。部署不关我们事,只提供各种脚本 |
32 ppto 2016 年 3 月 31 日 php 内核代码在线查看工具, www.phpsourcechm.com ~ |