一天天的踩坑,时间就是这么不够用的。
工作这么多年,一直没用虚拟机过。这次由于工作需要,需要将环境都预先在虚拟机里搭建好。
这次虚拟机安装,不是与系统版本冲突就是各种问题,暂就不提了。主要就记录下费时较多印象较深的一些问题。
标题里错误原因,请看文章里第4个问题。
本文虚拟机软件:Vmware。
以前遇到这种问题,都是缺啥补啥。这次从100到140版本,我都已经拷贝到C:\Windows\SysWOW64文件夹里进去了。
卸载又重装,折腾了三四次,仍然还是报这种少了文件的错误。
经过百度尝试,下载DirectX工具进行修复,修改C++ Redistuibute系列,最终解决。
从本机拷贝文件到虚拟机,安装Vmware Tools就可以直接复制往虚拟机里粘贴了。
开始拷贝一些文件还很快,后面遇到项目代码,可能是Vendor文件过于繁多的缘故,四五百兆的代码,一动就是要三四十分钟,有时还拷贝一大部分,结果给你抛个“没有权限生成目录”的啥错误提示。把代码压缩了,能很快复制过去,可是在虚拟机里提取又却很慢,有时也会失败导致根本不能解压。
vue中v-model变量的绑定,要求变量需要先有在data里声明过。
当遇到v-for遍历数据时,v-model里变量就需要每一次都不一样。直接用后端唯一性数据作为变量,虽然保证了for遍历后,v-model绑定的变量都不一样,但是这些变量并没有在data里有声明,所以也会报错。
解决方法就是:
现在data里定义一个变量,然后在created方法里获取后端接口数据时,再初始化每一个v-model要绑定的变量。
例如,后端接口有个唯一性id数据。
先在data里定义个变量:
info_arr: []
然后created方法里调用后端接口,遍历接口结果,初始化数据:
created: function(){
backend_api({
}).then( (res) => {
res.data.data.forEach( item=> {
this.$set(this.info_arr, "info_" + item.field_name, '');
});
})
}
最后在页面v-for里,v-model动态绑定变量,你就可以如下这样用了:
文章标题里这句诗,出自于宋朝周邦彦的《苏幕遮》这首词,全词如下:
《苏幕遮·燎沉香》
燎沉香,消溽暑。鸟雀呼晴,侵晓窥檐语。叶上初阳干宿雨、水面清圆,一一风荷举。
故乡遥,何日去。家住吴门,久作长安旅。五月渔郎相忆否。小楫轻舟,梦入芙蓉浦。
一句诗,好不好,有时候尽管读者说不出个所以然,但也是能感觉到的。
一句诗,一旦和读者以前所见心中所想关联起来,就自然而然的让读者轻松地记住了它。本文要说的这句诗,翟码农认为好就好在这里。
叶上初阳干宿雨,水面清圆,一一风荷举。这句诗一念完,朝阳升起,水面如绿色圆盘似的荷叶一片一片漂浮着,泛着些许晶莹的雨水,其中一些出水的荷花,亭亭玉立,在风中曼妙起舞,就犹如这样的一幅似曾相似的画面感跃如脑海。
要能达到感觉相通的这般境界,诗句的每一个字都少不了要下苦功夫。
同样写荷花,你读“接天莲叶无穷碧,映日荷花别样红”,你就会感到这句诗所给的画面,是一种千千万万荷叶耸立着簇拥着的画面,给人一种蓬勃的生命力的感觉。跟本文里的这句诗比较,稍加体会就感觉本诗里的夏季,相较于《晓出净慈寺送林子方》的夏季,气候要凉快一些。事实上,从诗词里的时间也是可以看出来的。“毕竟西度湖六月中”提的是六月,而本诗里却是五月,可见古人文采真是绝伦,才造就了如此精妙的诗词。
一秒钟800条的采集数据往redis队列里丢,翟码农取出消费,多进程,lrange+ltrim每次500条,redis pipe管道全用上了,还是消费不过来。
之前处理一条数据产生5条警告数据,生成与消费两边速度相当。但当一条数据产生50多条警告时,消费就明显吃力。
为了更好的优化代码,打日志后发现其中有个redis 的incr命令方法严重影响到了性能。
当时多进程运行下,$id = $redis->incr($key)这一行代码耗时240毫秒,如果直接换成$id=1,就是微秒级了。
不难理解,redis由于是单线程的,在对$key进行自增时,防止多进程下生成相同id值,redis必然会对$key进行加锁,如此就相当于每个进程必须等待上一个进程处理自增结束后,才可开始自己的自增操作。
所以实在对代码感到无能为力时,就按这种傻瓜方法来吧,每段都加上时间耗时的计算日志,这样子也不用劳神苦思的想了,直接看耗时结果来找问题。
本文为翟码农个人博客里有关开发经验总结的原创文章,转载请注明出处:http://www.zhai14.com/blog/watch-the-command-of-incr-in-redis-when-run-multiple-process-program.html
昨天和今天两天,都在折腾这个问题,今晚总算是解决了。趁现在记忆还清晰,赶紧复盘一下。
1. python采集传感器数据,lpush到采集队列
2. php从采集队列pop数据, 进行处理,同时提供后台系统接口
3. 后台用的vue框架,实时展现采集过来的设备数据
后台有一项设备在线离线的状态数据,在连接上传感器之后,数据总是在在线和离线之间切换,也就是本文题目所说的数据闪烁的bug。
问题涉及在于项目的2、3部分,所以第1部分本人就在此忽略了。
下面就开始复盘排坑经历。
接口的设备在线状态数据,是从redis里设备数据种获取的。
而设备数据其中的状态,是在一个swoole定时任务里写入的。
这个swoole定时任务,就是遍历所有设备,来确定设备的真实状态,具体逻辑如下:
有一个redis hash key,存储设备最新采集的数据,每个设备最多只有一条数据(即可能也没有)
1. 用for循环遍历设备,当前时间,如果比采集数据里的采集时间大于一个设定值(此值后台可设定),就很有可能代表设备离线,否则就必定是在线。
2. 如果最新采集数据里没有当前设备的数据,则必定是离线
休整了几个月,老本都快啃光了,终于有工作了。
第一天入职就7点起床10点多到家,还很不习惯。
闲了一个多月,骨头都废了,左边胸口腰背处,有钝痛感。
这家公司的开发形式,体验感很不好:数据库用的国产,在windows系统下不支持此数据库驱动;项目部署在另一个城市的局域网里,我还要远程去操作;服务器系统也是用的国产的。
项目涉及到python和swoole,php框架用的yii,哎,感觉需要学习的东西太多了。
早起早睡,努力奋斗吧。
刚开始学python,上次导包出现unresolved reference红色提示,折腾好久一直没解决。
from bs4 import BeautifulSoup
今天重新试了下网上普遍的解决方法:
1. 进入PyCharm->Preferences->Build,Excution,Deployment->Console->Python Console勾选上Add source roots to PYTHONPATH; 2. 进入PyCharm->Preferences->Project->Project Structure,通过选中某一目录右键添加sources; 3. 点击Apply和OK即可.
依然不得行。
上次是用pip命令安装的requests和beautifulsoup4这两个包的,也不知道装到哪里去了。
不管上次搞了什么鬼,这次我选择自己手动安装。
首先本人说明一下,本人系统环境Windows10,项目目录和python安装目录不在一起。
python安装目录:
E:\programdata\python\
python项目目录:
F:\python
在https://www.lfd.uci.edu/~gohlke/pythonlibs/里下载requests和beautifulsoup文件:
reboot重启了服务器后,所有的服务都需要重新启动。
启动php-fpm时,使用如下命令
systemctl start php-fpm.service
提示:
Failed to restart php-fpm.service: Unit not found
即找不到php-fpm这个东东。
网上查询资料,都是ps -ef |grep php-fpm这种方式来查看php-fpm的路径,可是俺的情况是根本就没有启动服务,哪里来的进程供俺查看。
问题的出现,本人猜想是之前更新php版本到7.3时,把旧的php5.4版本删除后,导致默认的php-fpm也被删了。
好在本人上次在/etc/php.ini配置文件里配置了extension_dir目录:
extension_dir = "/opt/remi/php73/root/usr/lib64/php/modules/"
这样才在/opt/remi/php73/root/sbin这个目录下找到php-fpm。
其实用find命令就可以快速解决这个问题的,自己命令敲错了,导致展示遍历文件的效果。
find -name php-fpm
所有有关php-fpm的文件通过在根目录下执行find命令就可以全部查找出来:
/etc/profile修改后,导致centos系统命令vi等都失效。
1.先通过/bin/vi /etc/profile命令将profile文件还原
2.此时source /etc/profile会报错。如果报错了,就reboot重启服务器试试。
博客也写有快两年了,是时候在首页加个搜索。
elasticsearch支持全文索引,所以希望通过这个技术来实现本人博客的搜索功能。
本人服务器centos系统版本:
>>cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
在centos系统里安装好elasticsearch后,elasticsearch服务却无法启动。
报错信息如下:
systemd[1]: Starting Elasticsearch... Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
看提示,估摸就是服务器没装jre导致的。因为elasticsearch是用java实现的,需要jre工具,即java的运行环境。
翟码农博客一直用的summernote编辑器写文章的。
以前有时候遇到电脑突然断电,或者网络突然掉线,导致写好的文章不翼而飞了。
痛心疾首过两三次,才下决心优化一下这块的功能。
优化的操作:
在编辑页面,用js的setInterval方法实现每隔1分钟就自动提交文章内容的效果。
为避免对mysql数据库操作过多,每个文章的redis key都设了一个有效时间:10分钟。
当文章的redis key过期了,就把redis里的内容,写入到mysql db里面去。
以上就是之前优化后的情形。
当有时候无意打开了同一篇文章的多个编辑页面,就造成两边都在同步更新,就会出现我一直在这边写文章,结果可能却被另一边的内容覆盖掉,就导致我写了好半天,结果和没写一样的效果。
现在针对这个问题,本人又进一步的优化了:
redis里对编辑的文章设置一个key值,当进入编辑页时,设置值为1;当点击保存后,设置值为0;在进入编辑文章的逻辑里,判断是否已处于编辑状态,如果已处于编辑状态,就自动跳转到列表页面。
可是上面的解决方法还是有点瑕疵,当本人进入编辑文章页后,并没有点击保存,直接切换到后台其它菜单页面去了,就导致再次去编辑文章,就永远提示处于编辑状态,而无法编辑了。