V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lamCJ
V2EX  ›  PHP

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

  •  
  •   lamCJ · 2016-03-30 15:47:44 +08:00 · 7678 次点击
    这是一个创建于 3160 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    说明
    • [1] 环境复杂 指的是服务器上使用还有 Java 等项目,目前的解决办法是前台使用 Nginx 反向代理,后端 PHP 依然使用 Apahce 。

    • [2] 404 的问题会受服务器网络速度影响。(公司服务器速度不行...)

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

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

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

    难道你连一个 staging 环境都没有吗?
    lamCJ
        9
    lamCJ  
    OP
       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
        10
    lamCJ  
    OP
       2016-03-30 16:27:36 +08:00
    @Mush
    @Orzzzz 只听过但从没弄过 Docker ,目前公司也没看出有用这个的意图,有什么推荐的上手资料供研究先么
    UnisandK
        11
    UnisandK  
       2016-03-30 16:30:06 +08:00   ❤️ 1
    PHPStrom 可以用远程服务器的 php 版本来调试的,本地要搭开发环境肯定是尽量和服务器保持一致
    lamCJ
        12
    lamCJ  
    OP
       2016-03-30 16:31:17 +08:00
    @SpicyCat 嗯。。。是的

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

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

    本地版本都和 production 不一样真是闷声作大死。你目前貌似还不需要用 docker 等工具来达到 100% 一致,但保证各种依赖版本一致实在是太基本的需求了。
    lamCJ
        21
    lamCJ  
    OP
       2016-03-30 16:51:18 +08:00
    @zi 因为.... 我开始学 php 的时候用的版本就已经不低了 低版本不熟悉....
    lightening
        22
    lightening  
       2016-03-30 16:59:59 +08:00
    @lamCJ 那你应该升级服务器环境了。要么自己学习低版本,要么升级服务器的 php 。
    lamCJ
        23
    lamCJ  
    OP
       2016-03-30 17:04:11 +08:00
    @lightening 你们是怎么搭建 staging 环境的呢?(是如果服务器是 centos5.11 那我也得去下载一个 centos5.11 然后在虚拟机里面跑 php 这些,这样吗?)
    lightening
        24
    lightening  
       2016-03-30 17:07:41 +08:00
    @lamCJ 买一个一模一样的服务器,装一模一样的软件。
    lightening
        25
    lightening  
       2016-03-30 17:08:42 +08:00
    @lamCJ 也用(几乎)一模一样的部署方法(可能就域名不一样,另外数据是假的)。每次要先部署到 staging 测试一下,然后再部署到 production 。
    lamCJ
        26
    lamCJ  
    OP
       2016-03-30 17:09:37 +08:00
    @lightening 懂了~ 谢谢
    lhbc
        27
    lhbc  
       2016-03-30 17:10:43 +08:00
    @lamCJ 再慢也不会 404 啊, nginx 只有在找不到文件的时候才会报 404
    lamCJ
        28
    lamCJ  
    OP
       2016-03-30 17:26:54 +08:00
    @lhbc 那我也解释不了了,反正现象就是如果在审查工具中看状态码就是 404 ,而直接访问图片 url 却可以看到...

    就是这样:

    ![status code 404]( )

    ![direct access ok]( )

    我也觉得奇怪... 所以我猜可能就是网络不行
    dishuibaby
        29
    dishuibaby  
       2016-03-30 18:20:36 +08:00   ❤️ 1
    我们是线下有一套与线上代码一致的测试环境。代码放到 svn ,然后开在测试机进行调试。你这样子系统不一致、各种版本不一致。肯定会出问题的。我们现在环境一致,都经常上线的时候出错。紧急回滚。
    zaishanfeng
        30
    zaishanfeng  
       2016-03-30 18:34:08 +08:00 via Android
    镜像线上环境
    wweir
        31
    wweir  
       2016-03-30 21:00:18 +08:00
    开发测试环境通过 docker 统一。部署不关我们事,只提供各种脚本
    ppto
        32
    ppto  
       2016-03-31 09:09:35 +08:00   ❤️ 1
    php 内核代码在线查看工具, www.phpsourcechm.com
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1092 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.