美文网首页
遇到技术问题搞不定,怎么办?

遇到技术问题搞不定,怎么办?

作者: somenzz | 来源:发表于2018-10-21 22:54 被阅读68次

    最近在学习一个开源的 cmdb 系统,学习的动机有以下两方面:
    一是 cmdb 不仅在运维领域中有很强的实用价值,也可以用做资产管理系统。
    二是它用到的技术

    • 前端:Vue.js + Element-UI + Vue Router + Vuex + Axios + Webpack
    • 后端:Python3 + Django + Django REST framework + Elasticsearch + Mysql + LDAP + uwsgi + Nginx + Docker

    都是当前最流行的技术,也是我比较感兴趣的,是今后一段时间的学习方向。

    前后端分离已成为当前开发项目的一种现状,未来的程序员还是专人做专事,所谓的全栈工程师其实是个违命题,一个人精力有限,生命也有限,怎么可能样样技术都精通呢,全栈无非是能解决更多技术领域的问题,对项目有全局的思考,出了问题可以很快定位是哪里出了问题。而解决问题的过程正是提高自己能力的过程,解决技术问题的类型越多,离全栈工程师的距离也就越来越近,所发挥的价值也就更大。

    这里用的的技术中,我对 Python3 较熟悉一些,其次是 Django ,再其次是 Django REST framework、 uwsgi 、 Nginx,其他都听说过,从来没有用过。

    解决问题的过程

    我 git clone 一下项目源码,安装完 mysql、Elasticsearch、及一些依赖的 Python 库,修改了数据库连接的配置,满怀期待地执行了

    python manage.py makemigrations
    

    结果却报错了,弄了半天,一运行就报错了,程序就是这样,不过不报错,怎么能体现程序员的水平呢?于是看报错内容。
    报错内容如下:

    django.db.utils.OperationalError: no such table: mgmt_permission
    

    这个错误提示非常明显,就是数据库中不存在这个表 mgmt_permission,我用过 django,修改模型层中的类时,django 会自动修改对应的物理表,有时候由于在数据库手工删除或修改表就会导致报表不存在的错误,根据网上的方法,我删除了每个 app 下的 migrations 文件夹,让其重新建表,于是又期待地执行了

    python manage.py makemigrations
    

    失望的是,问题依旧,bing 和 google 上搜索到的方法都看了一遍,仍不适用。也请教过大神,说要仔细检查 settings 文件,我于一行一行代码地去看,没发现任何问题,将数据库删除,重新建立,错误依旧,简直被虐残了。这时,内心是崩溃的,气得去睡了一觉。

    一觉醒来,清醒了许多,我在想,django 在 python manage.py makemigrations 时就失败了,根据打印信息,根本没有走到建表那一步,所有的表一个都没建,这就报了表不存在的错误,没建表,当然不会存在表了,那问题一定出在建表之前,是不是有代码先用了这个表,导致报表不存在的错误,于是在 mgmt 目录下搜索了所有用含有
    Permission 的代码,结果发现一个初始化的脚本 initialize.py 中引用了,并在 view.py 中被导入,估计就是它了,注意掉 view.py 中的

    from . import initialize
    

    再次执行

    python manage.py makemigrations
    python manage.py migrate
    

    成功,这时小兴奋了一把,然后再把恢复那步注释操作,执行

    python manage.py runserver
    

    成功地启动了 cmdb 后端。这里不得不说,如果作者在 readme.md 中加个小提示,我想他得到的星应该更多,不过我还是给这个仓库点了个星。

    遇到技术问题搞不定,怎么办?

    首先,技术问题都是可以解决掉的,这里说的技术问题是是已经成熟的技术,由于编码错误或配置错误导致程序报错、系统故障等问题。遇到问题,不必惊慌,想应对办法,技术能力是一个人执行力的体现,因此不要害怕遇到错误,解决错误的过程就是提高执行力的过程。

    其次,遇到问题先思考是哪一步出错了,通过日志打印,或调试确定是哪个环节,而不是直接将错误日志粘贴搜索引擎。定位后,如仍不能解决,再根据相关的关键字+报错信息去搜索引擎解决方法,推荐 bing 或 google ,搜索的第一页基本就够了。如果对于完全不熟悉的项目,建议先看文档,对着文档一步一步操作。

    最后,做记录,后面遇到同类的问题,都可以很快解决了。

    小收获

    之前没有部署过前后端分离的项目,这次算是学到了。前后端分离是指 web 前段的服务与 api 接口的服务不在同一域上。

    本项目中:
    web 前端:vue 编写的静态页面、js脚本等。提供给用户的服务地址为:http://127.0.0.1:8080。
    后端:供前段使用的 api 接口,服务地址为: http://127.0.0.1:8080。

    nginx 连接前端和后端。

    web 前端可以使用 npm run dev 来启动服务,也可以使用 nginx 来启动,推荐使用 nginx ,简单快速,而且支持负载均衡,及各种优化配置。这里附上本例中的 ngnix 配置。

    server {
            listen 8080;
            server_name localhost;
    
            error_page 500 502 503 504 /50x.html;
            location = /50x.html {
            root html;
            }
    
            root E:\github\cmdb-web\dist;
            index index.html;
    
            location / {
            try_files $uri $uri/ @router;
            index index.html;
            }
    
            location @router {
            rewrite ^.*$ /index.html last;
            }
            location ~ /api {
            proxy_pass http://127.0.0.1:8000;
           }
    }
    

    资源分享

    相信程序员都想使用 google 来搜索技术问题,但是国内的环境,不说了。如果想使用 google ,请在 github 上搜索 xx-net,这么好的资源,我都不想告诉别人,自己用就行了,免得知道的人多了又凉了。

    (完)

    相关文章

      网友评论

          本文标题:遇到技术问题搞不定,怎么办?

          本文链接:https://www.haomeiwen.com/subject/xsupzftx.html