前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >遇到技术问题搞不定,怎么办?

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

作者头像
somenzz
发布2020-12-10 11:12:23
8410
发布2020-12-10 11:12:23
举报
文章被收录于专栏:Python七号Python七号

最近在学习一个开源的 cmdb 系统 (配置管理系统) ,仓库链接:https://github.com/open-cmdb/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 ,搜索的第一页基本就够了。如果对于完全不熟悉的项目,建议先看文档,对着文档一步一步操作。

如果仍不能解决,看看这个项目\代码 有没有运行成功的情况,如果有,运行成功的环境是怎样的,配置信息是怎样,是不是与操作系统有关,对成功案例的环境、依赖、配置、逐一对比,精确定位问题。还有些奇怪的问题是不是可以通过重启服务,或重启操作系统来解决。

如果还是无法解决,这个代码是谁写的,发邮件请教他,或者在 github 上提交 issue,或者直接在知乎上、stackoverflow上提问,提问时提供详细的配置信息和错误日志信息。

如果最后未解决,听我劝一句,放弃解决这个问题吧,可能它从一开始是就错的。

最后,做记录,不管解决还是未解决,都要做记录,后面你的同伴遇到同类的问题,可以做重要参考,他们定会感谢你的付出。

学习 cmdb 的小收获

之前没有部署过前后端分离的项目,这次算是学到了。前后端分离是指 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,这么好的资源,自己用就行了,免得知道的人多了又凉了。

(完)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决问题的过程
  • 遇到技术问题搞不定,有什么方法?
  • 学习 cmdb 的小收获
  • 资源分享
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档