开发机器目前用的是 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-03-30 15:59:11 +08:00
首先统一 php 版本
|
2
Mush 2016-03-30 15:59:33 +08:00
docker 大法好
|
3
ersic 2016-03-30 16:02:33 +08:00
环境一致还经常出错呢,别说环境不一致了,我就经常犯大小写的错误.
|
4
SpicyCat 2016-03-30 16:07:08 +08:00
看你描述都觉得蛋疼。环境问题能解决就不错了,快速解决更可遇不可求。
开发环境和线上环境最好一致,不然你会遇到无穷无尽的奇怪问题。 |
5
lecher 2016-03-30 16:16:51 +08:00 1
看报错看报错,没有报错日志是查不出来问题的。
一般 win 下面的文件大小写是不区分的,而 linux 对文件有绝对的大小写区分,所以如果有 windows 下面开发的代码,文件名的命名规范一定要统一好,偷懒就用全小写,不然到线上,为一个大小写的区别, linux 报找不到文件是常有的事。 线下开发环境搭建一个与线上一致的版本是必须的,至少在上线之前代码放到与线上环境一致的测试环境跑一遍测一测。 如果线上出问题了,第一反应应该回滚代码,然后把错误日志找出来诊断原因。 docker 大法确实好,在线上部署对运维能力要求高,但是确实很省开发人员搭建环境的时间。运维把配置脚本写好,开发把需要的安装文件和脚本 copy 过去,运行一下就可以把环境拉起来。 |
6
Orzzzz 2016-03-30 16:17:08 +08:00
Docker 大法好
|
7
learnshare 2016-03-30 16:23:46 +08:00 1
保证开发、测试、运行的环境一致。写代码用什么当然无所谓
|
8
lightening 2016-03-30 16:25:48 +08:00
看你要一致到何种程度,以及要方便到什么程度。
难道你连一个 staging 环境都没有吗? |
9
lamCJ OP @b821025551b 我很想,但是服务器上的版本( CentOS5.11+nginx0.8.55+apache2.2.3+mysql5.09+php5.42 )不是我说了算的,而我本地又想用比较新的开发环境。。 (刚偷偷升级 PHP 至 5.6...)
|
10
lamCJ OP |
11
UnisandK 2016-03-30 16:30:06 +08:00 1
PHPStrom 可以用远程服务器的 php 版本来调试的,本地要搭开发环境肯定是尽量和服务器保持一致
|
12
lamCJ OP |
13
lhbc 2016-03-30 16:32:52 +08:00
“[2] 404 的问题会受服务器网络速度影响。(公司服务器速度不行...)”
这是什么鬼…… |
14
zi 2016-03-30 16:36:01 +08:00
@lamCJ 既然服务器版本不是你说了算,为何还要偷偷用新版,自己挖的坑含着泪也要跳下去啊
特别是有的函数改了、废了,到时候改起来那酸爽简直了。。 |
15
lamCJ OP @lightening 当然是少出现 500 404 之类最好了。目前没有走这么标准的流程,你们都有的吗?我才工作不久,这些不是很懂,貌似上面也没这样要求过
|
18
SpicyCat 2016-03-30 16:46:35 +08:00 1
可以本地用 docker 装个跟线上一样的开发环境,然后代码文件用 volume 挂载。
|
19
damonzheng 2016-03-30 16:47:19 +08:00
一定是跟我们一样什么东西都扔在一个 OS 上
|
20
lightening 2016-03-30 16:50:12 +08:00 1
@lamCJ 对。我认为你现在开个 staging 环境,和 production 完全保证一致。并且把本地用的依赖版本都换成和生产环境一样,暂时够用了。
本地版本都和 production 不一样真是闷声作大死。你目前貌似还不需要用 docker 等工具来达到 100% 一致,但保证各种依赖版本一致实在是太基本的需求了。 |
22
lightening 2016-03-30 16:59:59 +08:00
@lamCJ 那你应该升级服务器环境了。要么自己学习低版本,要么升级服务器的 php 。
|
23
lamCJ OP @lightening 你们是怎么搭建 staging 环境的呢?(是如果服务器是 centos5.11 那我也得去下载一个 centos5.11 然后在虚拟机里面跑 php 这些,这样吗?)
|
24
lightening 2016-03-30 17:07:41 +08:00
@lamCJ 买一个一模一样的服务器,装一模一样的软件。
|
25
lightening 2016-03-30 17:08:42 +08:00
@lamCJ 也用(几乎)一模一样的部署方法(可能就域名不一样,另外数据是假的)。每次要先部署到 staging 测试一下,然后再部署到 production 。
|
26
lamCJ OP @lightening 懂了~ 谢谢
|
28
lamCJ OP @lhbc 那我也解释不了了,反正现象就是如果在审查工具中看状态码就是 404 ,而直接访问图片 url 却可以看到...
就是这样: ![status code 404]( ) ![direct access ok]( ) 我也觉得奇怪... 所以我猜可能就是网络不行 |
29
dishuibaby 2016-03-30 18:20:36 +08:00 1
我们是线下有一套与线上代码一致的测试环境。代码放到 svn ,然后开在测试机进行调试。你这样子系统不一致、各种版本不一致。肯定会出问题的。我们现在环境一致,都经常上线的时候出错。紧急回滚。
|
30
zaishanfeng 2016-03-30 18:34:08 +08:00 via Android
镜像线上环境
|
31
wweir 2016-03-30 21:00:18 +08:00
开发测试环境通过 docker 统一。部署不关我们事,只提供各种脚本
|
32
ppto 2016-03-31 09:09:35 +08:00 1
php 内核代码在线查看工具, www.phpsourcechm.com ~
|