本地和服务器上运行不一致如何解决?

2016-03-30 15:47:44 +08:00
 lamCJ

开发机器目前用的是 Win10 ,写项目用的 PHPStrom , XShell 连接 Linux , Xftp 打包上传网站(快换 Git 了...)。

本地开发 nginx+apache+php+mysql 等版本都比较新,但是服务器端的整个 LNMPA 的版本都不高。

某些项目在这种差异下几乎没有影响,但是最近服务器环境比较复杂[1]后,本地测试无误后的 PHP 项目上传到服务器上后很多地方出现 500 ,甚至 404[2],路径出错等。

请问你们 怎么避免 这种问题?以及遇到这种问题的时候 如何快速解决 的?

或者分享一下你们的不错的 开发&部署 方案? 以及其他 建议

必须让开发环境和线上环境完全一致吗?

说明
7678 次点击
所在节点    PHP
32 条回复
b821025551b
2016-03-30 15:59:11 +08:00
首先统一 php 版本
Mush
2016-03-30 15:59:33 +08:00
docker 大法好
ersic
2016-03-30 16:02:33 +08:00
环境一致还经常出错呢,别说环境不一致了,我就经常犯大小写的错误.
SpicyCat
2016-03-30 16:07:08 +08:00
看你描述都觉得蛋疼。环境问题能解决就不错了,快速解决更可遇不可求。
开发环境和线上环境最好一致,不然你会遇到无穷无尽的奇怪问题。
lecher
2016-03-30 16:16:51 +08:00
看报错看报错,没有报错日志是查不出来问题的。
一般 win 下面的文件大小写是不区分的,而 linux 对文件有绝对的大小写区分,所以如果有 windows 下面开发的代码,文件名的命名规范一定要统一好,偷懒就用全小写,不然到线上,为一个大小写的区别, linux 报找不到文件是常有的事。

线下开发环境搭建一个与线上一致的版本是必须的,至少在上线之前代码放到与线上环境一致的测试环境跑一遍测一测。
如果线上出问题了,第一反应应该回滚代码,然后把错误日志找出来诊断原因。

docker 大法确实好,在线上部署对运维能力要求高,但是确实很省开发人员搭建环境的时间。运维把配置脚本写好,开发把需要的安装文件和脚本 copy 过去,运行一下就可以把环境拉起来。
Orzzzz
2016-03-30 16:17:08 +08:00
Docker 大法好
learnshare
2016-03-30 16:23:46 +08:00
保证开发、测试、运行的环境一致。写代码用什么当然无所谓
lightening
2016-03-30 16:25:48 +08:00
看你要一致到何种程度,以及要方便到什么程度。

难道你连一个 staging 环境都没有吗?
lamCJ
2016-03-30 16:26:48 +08:00
@b821025551b 我很想,但是服务器上的版本( CentOS5.11+nginx0.8.55+apache2.2.3+mysql5.09+php5.42 )不是我说了算的,而我本地又想用比较新的开发环境。。 (刚偷偷升级 PHP 至 5.6...)
lamCJ
2016-03-30 16:27:36 +08:00
@Mush
@Orzzzz 只听过但从没弄过 Docker ,目前公司也没看出有用这个的意图,有什么推荐的上手资料供研究先么
UnisandK
2016-03-30 16:30:06 +08:00
PHPStrom 可以用远程服务器的 php 版本来调试的,本地要搭开发环境肯定是尽量和服务器保持一致
lamCJ
2016-03-30 16:31:17 +08:00
@SpicyCat 嗯。。。是的

而且我解决 500 的办法好死板的:在浏览器中找到出现 500 页面,然后再服务器上运行 `php -f 'xxx.php'` 看报错,然后一个个排除。。。
lhbc
2016-03-30 16:32:52 +08:00
“[2] 404 的问题会受服务器网络速度影响。(公司服务器速度不行...)”

这是什么鬼……
zi
2016-03-30 16:36:01 +08:00
@lamCJ 既然服务器版本不是你说了算,为何还要偷偷用新版,自己挖的坑含着泪也要跳下去啊
特别是有的函数改了、废了,到时候改起来那酸爽简直了。。
lamCJ
2016-03-30 16:38:42 +08:00
@lightening 当然是少出现 500 404 之类最好了。目前没有走这么标准的流程,你们都有的吗?我才工作不久,这些不是很懂,貌似上面也没这样要求过
lamCJ
2016-03-30 16:40:28 +08:00
@lhbc 就是慢的时候比如图片会加载失败 用 chrome 审查就是 404 ... 但是复制图片路径单独访问可以看到
akira
2016-03-30 16:42:01 +08:00
@lamCJ 本地多架一个版本的环境来测试不会死人吧
SpicyCat
2016-03-30 16:46:35 +08:00
可以本地用 docker 装个跟线上一样的开发环境,然后代码文件用 volume 挂载。
damonzheng
2016-03-30 16:47:19 +08:00
一定是跟我们一样什么东西都扔在一个 OS 上
lightening
2016-03-30 16:50:12 +08:00
@lamCJ 对。我认为你现在开个 staging 环境,和 production 完全保证一致。并且把本地用的依赖版本都换成和生产环境一样,暂时够用了。

本地版本都和 production 不一样真是闷声作大死。你目前貌似还不需要用 docker 等工具来达到 100% 一致,但保证各种依赖版本一致实在是太基本的需求了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/267372

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX