工作中遇到的一些坑,以及解决方法的随笔记录

git

假如 我现在在修改hotfix, 在下面新建了一个 yhy_hotfix 并且修改完了,(push到了远端)

最好是所有的东西都走一遍hotfix

1 切换到 hotfix

2 git pull origin hotfix

3 run test ( control+R 按多次就是上翻)

4 merge yhy_hotfix

5 run rest

6 git push all hotfix

 

最后 切换到master 同理 做类似的上述操作

 

上office   这台机器上 pull。origin. master

pushtest    :   把修改推到测试上. 问一下其他人是否可以pushtest

exit 上test 上重启服务:

ssh jump 然后选择 17 livetest1 然后选择 2 zeus

然后重启:  reload_http

然后上测试查看修改 

 

如果是添加新的后台功能 或者 加权限!!!

1 在liveliest1上 src 目录下运行python manage.py migrate

(ValueError: too many values to unpack) 如果报了这个错 很有可能是model 里面的permissions少了括号,或者少了逗号,导致django 认为参数太多

 

2 在测试上的

 Authentication and Authorization administration

groups 里面吧权限 放出来

 

 

(权限问题!!!)

models 里面的permissions里面的名字 必须和 admin_views第三个参数(权限) 对应好,不能有错

 

 

如何上线????

上线步骤:

1告诉钉哥 :我要上线

2等着

 

 

问题:

pull util 库 在work库下面 进入util 然后 git pull origin 

如果xxxx 没有安装,test 会挂掉,解决方法:

那么我们直接去src下,pip install -r requirements.txt (其实这一步在代码准备里面有,只是自己忘了而已)

 

解决方法3: (创建完整的db)

在master 下 pull 然后。python setup.

 

 

问题4 :

  在databases 里面可能有人写了 00x ,你也新建了一个00x , 那么我们的python setup.py --cleanup 会报错,因为head 只能有一个,所以我们需要修改这个冲突。

注意:

revision = '0515531373bb'

down_revision = '2c71be138db0'          

一个是自己的随机数, 一个是其后面的随机数

 

如果要改变databases , 那么就要在脚本那儿新建py ,:

 python new_db_file.py --db miveshow_task --name add_follow_test  

 

之后在测试、线上也需要更新????:

如何更新呢????

实现步骤:

1. 新建表:

在src — databases 下 :python  new_db_file.py —db databases’s_name   --name newtable’s_name 

然后在pycharm 里面的databases 写相应的sql代码

      然后在databases 下 python db_upgrade.py —db databases’s_name

线上更新:

 # DB

  liveserver03(src) => git stash pop =>(database) python db_upgrade.py => git stash

   如果冲突了:git reset --hard

 

 

 

  liveadadmin => python manage.py migrate

 

更新数据库流程改一下吧。

在liveserver03上

1、git diff看一下本地有什么临时修改,然后把临时修改要么stash,要么checkout掉。

2、git stash list 查看一下有哪些stash的,找到哪个修改了很多 alembic.ini 的stash,查看stash内容:git stash show -p stash@{ID}

3、git stash apply stash@{ID} 应用那个stash,最好不要pop。

4、在 database 目录下,python db_upgrade.py

 

 

 

 

调试代码:

python manage.py shell

可以单独运行某一个部分的代码,来观察其返回值等等

 

 

直接在databases 里面操作(危险!!!)

1 begin

2 执行命令

 

3 如果出错 : rollback

4 确定之后 commit

 

 

 

错误:

IOError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/editor.py'

错误类型:Permission denied

解决方法:  请 进入虚拟环境,谢谢??

 

 

 

 

如何 用shell 执行某一段代码???

python manage.py shell

然后进入到了python的环境下, 然后因为instaces里 有一些实例化的class  (xxx)

找到自己改变的class(别忘了添加了pdb) ,import进去,然后xxx.def 就可以进行调试了。

 

这样主要是为了手动测试一下,自己写的代码有没有问题。

 

 

 

当什么东西没有,需要到测试上去看相关的配置,比如settings

打算先上test 然后去db看一眼, 测试 的mysql 进不去db

感觉正确的解法:远程连接数据库

然后在后台http://test.api.dokidokilive.com/dk1503/admin/basic_settings/setting/?all=

找到了一个 “wage_settings”

 

How远程连接数据库:

 

 

 

 

不要在线上 vim 太大的文件,会出事故的!

 

 

临时checkout

git stash

git stash pop

 

 

如何访问POST接口的 api:

比如:家族徽章:

 curl http://127.0.0.1:8000/api/family/family_permission_sort/\?uid\=uhttpA -X POST -d "family_uid=uhttpA&sort_list=[[ 0, 1], ]"

http://test.api.dokidokilive.com/api/guild/guild_recommend_anchors/add/?uid=u3843611520997005100001368

 

MYSQL 报错:1406 Data too long for column

看一下是否自己的表设置的字段长度不够。。。

 

 

更新mysql 错误:

*** ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE\n                uid = 'uhttpA'' at line 4")

错误 :

 解决方案--》最后执行查询的SQL语句应该是下面的样子:

SELECT *FROM renshiguanliWHERE GH=13

表名和关键字WHERE之间应该有空格的。

在WHERE之前加个空格试试。

 

自己的错误时: WHERE 前面有一个逗号, 把逗号去了。

 

 

 

 

错误:当单独跑局部的 function test没问题,但是全局的test 这一部分却报错???

是因为:

local_cacher 没有删掉,光更新了 redis 。。。所以会找不到。。。

 

 

新增了user这张表的信息,那么也要去测试上检查user 各个功能是否会出错。。。

在liveliest 上tmux  a -t http 去看看有没有相关报错

 

脚本的运行调试:

脚本有时候要给一些参数。。。那么如果调试呢

Python 脚本的名字 -自己设置的参数 xxx -参数2 xxx2

比如:

python tools/40W_add_family_extra_permissions.py -e t123  -b 0

 

具体参照——文件:40W_add_family_extra_permissions

 

 

 transaction( 也就是 begin,commit 和rollback 的相关操作)

这个操作会将数据锁死,如果如果我们对常访问的表进行大数据操作的话。。。这个东西是会变的非常危险(会出事故!),所以一定记住

 

 

我们的 货币系统:()代表在mysql中的 存储方式

获得方式。               用途              

1 gold(credits).                       充钱                                送礼

 

2 coins(recived_credits)          直播收礼物                      兑换doki_coins

                兑换gold 和 cash

 

3 doki_coins(doki_coins)        主播手里的coins兑换,      兑换gold

Table = user_coins 签约主播工资月结              兑换亚马逊券

答题活动可以得到              兑换cash(未实现)

 

 

 

测试切换到自己分支(记得要切回去)

1 上测试,进入src

2 git checkout 自己的分支. Git pull

3 reload

4 测试完之后切回来

 

出现系统错误http_miss_setting_in_db:

1 线上 系统设置 查找

2 在本机添加这个设置

 

 

 

 

重启schedu job(或者其他一些东西)

一般在livetest1 上 tmux 可以看到一些分支

attach 过去 然后control + c ,再重新启动(按上)即可 

 

线上:

重启别的,不管线上线下,有个东西叫做 部署

 

 

 

如何查看log_error信息。(测试上) 

/var/log/zeus

 

 

 

一定不能在pusic_admin里面.   import.  api.instance  ! 切记切记

 

 

 

临时上线—(后台)。liveadmin ———src 切到master 分支——pull———tmux -a t ausg—重启

 

 

 

如果需要看一个数据流的详细数据:比如post

用dir() 去查看其函数,然后仔细去看看其中是否有自己需要的

比如说 想要看 django 的用户 request.user.username 就是通过上述步骤得到的

 

 

 

 

list 为dict 时的排序

 sorted_guild_list = sorted(guild_list, key=lambda x: x['anchor_number'], reverse=True)

 

 

 

Django 如果change_actions 没有效果的话很可能是没有继承DjangoObjectAction

 

 

 

关于主库从库——读写分离

从库 是只读的,一般的读取操作都从 从库中读取,(如果能接受一定的延迟 例如1s以上)

主库一般指用来写入。 (如果特别关键的读写都用主库,例如钱

 

主库从库一般是一致的,但是会有延迟,而且有可能主从断开(出事故了

 

 

 

 

如何查看日志:

1 找到logger

2 在相应的 dev prod test 的 相应的logger 例如backend.conf里面去查看 path

记得选前xx行 

 

 

Tail -f xxxxxx.log  | grep yhyxxxxxxx

 

 

 

关于webscoket 的理解:

  用户: ———A。

服务器  a        b         c

登陆call一次api拿到user_info之后,会缓存下来。然后用户发消息 ———a,b,c————其他用户

 

如果user_info中有字段的消息改变了,那么其他用户看得到改变

但是用户A,如果不更新的话,他是看不到的,那么我们通过websocket告诉用户A,所以这个消息一定要确认能够发出去。

 

 

 

查看django 的日志

在miveshow_admin里面有相应的Django_log等表单,可以去找找

 

 

 

 

主播工资结算:settle_signed_anchors_wage

 

 

 

 

重命名 相关命令:

alias

alias -p

 

 

 

跑test 的时候,mysql 卡住不动

当你某一个debug 没做完的时候———很有可能此时你锁住了某个db。。。

 

 

 

主从p2

 

 

从数据库导出数据, 由于权限一般只允许使用

mysqldumps. 但这个不能执行sql语句

所以用这个: echo "select * from miveshow.users limit 1" | mysql_prod > out.txt

echo 'select id from dbname.tbname where id = 1;' | mysql -hhostname -ureadonly -preadonly dbname > xxxx.sql

 

 

 

连接远程数据库

1 mysql -hip(没有空格)-u -p (这两个数据可以去push01 的db_local里面看)

 

 

Python 中

from api.instance import xxx

会吧instances中的所有的实例化对象都做一遍

 

 

 

 

查看http 是否重启成功:

tail /var/log/zeus/miveshow_http  ( + | grep error)

 

 

 

 

关于kafka 的消费者一个应用的实例:

可以看看 src/commom/kafka_batch_consumer/processor.py 里面的Processor  从task 中区分了很大一部分的逻辑过来。

 

 

 

 

Kafka 生产者例子:

Src/common/pusic_message.py 里面各种创建消息、发送至kafka。 例子之一:红包消息发送。

 

 

 

 

关于类 继承 、重写:__init__() 的一个很好的例子:

写设备分发活动的时候 想给一个 class RichAnchorTaskHandler增加一个kafka_producer, RichAnchorTaskHandler继承了RichAnchorBaseHandler

 

于是此时有两种写法:

1 重写RichAnchorBaseHandler的 __init__, 这样的话,所有继承这个的都需要改动

2 在RichAnchorTaskHandler中重写一个__init__ ,这样的话,只需要改这个

 

( 如果按照最简单的原则,那么肯定采用2。改写最外层的class, 有init 的话就不需要再往上看继承关系了

地址: src/events/handler

 

 

Python 默认参数的陷进:居然有缓存机制:

https://www.cnblogs.com/youngershen/p/3978332.html

 

 

 

Mac. 配置lrzsz 教程:

https://segmentfault.com/a/1190000012166969

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值