手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

记录一次数据库无法访问的处理

 很突然,线上有一台服务器,突然报表不存在。所有的项目只要涉及到数据库的,都直接报表不存在。SSH到服务器上一看,进程也活着,目录下的文件也存在着,怎么就表不存在了呢?

当时也没有注意,觉得可能是程序出错了。就restart了一下数据库,结果,这回出大事了,数据库无法启动。再启动,仍然是这个问题。连忙看了一下日志,发现报错原因居然是磁盘满了。这,不科学啊。df -h 看一下,果然,系统盘自带的20G,剩余空间为0。

怎么办?先清一下apt-cache,发现多出100多M的空间,尝试启动了一下,果然数据库启动了。再检查到底是谁占了?直接du -sh  /var/log。居然只有200M,那是怎么回事呢?

继续 找,du -sh 一个目录一个目录的看。发现居然是mail目录写满了,一个mail文件。17G,用tail -n 1000 看了一下。文件居然都来自crontab ,再打开crontab -l,才发现,原来是有一个5年前的svn的勾子在运行。这个勾子,每5秒一次,就这样辛苦的运行了5年,终于通过邮件,硬生生的将磁盘写满了。

知道问题所在就简单了。关闭crontab (因为已经不用了)。同时清空邮件文件。再df -h,发现多出17G空间。好嗨森

 

Git:Out of memory, malloc failed解决

 本来我是应该不会遇到这种问题的吧?只是在用composer的时候,因为dcat-admin经常更新,但release版本又比较慢。所以就直接引用他的git了。本地无所谓,毕竟我有32G内存,上线后,在composer update的时候,报out of memory.

网上不少的例子都是说:git config --global pack.windowMemory 1024m,我这样试了之后没有解决
于是:

git config --global pack.windowMemory 1g
git config --global pack.packSizeLimit 1g

git config --global pack.deltaCacheSize 1g

git config --global core.packedGitLimit 1g

git config --global core.packedGitWindowSize 1g

还是没有用。再找资料的时候有看到说,可能是因为没有swap空间,即使你的内存大,没有swap也可能会有问题。于是看了一下,确实:free -m的时候。swap确实是0,参考:https://stackoverflow.com/questions/14038074/git-pull-fatal-out-of-memory-malloc-failed

好吧,几步操作:

1、dd if=/dev/zero of=/root/myswapfile bs=1M count=1024

2、chmod 600 /root/myswapfile

3、mkswap /root/myswapfile

4、swapon /root/myswapfile

5、vim /etc/fstab
/root/myswapfile               swap                    swap    defaults        0 0

然后就一切OK了,没有好好排版。因为,断断续续的写了三天。中间还断过一次。忍忍吧(等什么时候换laravel后台再好好弄弄)

睡觉开灯对人体有害?

 标题是一个疑问句,事实上很多人在说到睡觉时是不是能够开灯,开灯对身体有没有影响,好象都是说非常大。什么开灯会影响视力,黑色素会沉淀之类的。找了一下,几乎所有说这个的,都提到了一段内容:

XML/HTML代码
  1. 美国宾州大学医学院暨儿童医院的研究人员,对479位2-16岁的幼童及青少年进行研究,数据显示,视力与2岁的睡觉光源亮度有相当密切的关联性。  
  2. 2岁前若是睡在黑暗房间,近视比例是10%,2岁前若是睡在开着小夜灯的房间中,近视比例是34%,2岁前若是睡在开着大灯的房间中,近视比例是55%。  

这个我就感觉到太厉害了。这些研究人员能够从2岁开始跟踪,跟踪了14年。我翻了一下谷歌,大概几十页。搜索结果算是半官方的是中国中新网:http://www.chinanews.com/hb/news/2010/06-12/2341373.shtml,这篇文章发表于2010年,文中提到了:【前年刊登在《自然》期刊中,由美国宾州大学医学院暨儿童医院针对479位2岁到16岁的幼童及青少年的调查】。提到了:前年。证明这个是2007年发表的。

然后我继续搜索,发现一个【国际明目网】,网址是【http://www.mingmu.net/thread-67-2-1.html】,也提到了这个内容。但他的内容的日期是【2007-2-9 01:08:59】,很辛苦的大半夜的发贴。于是我去翻了一下自然杂志。。。。没看到有相关的(可能是因为我翻的是国内的)

那我就想了。这么有名的实验,有么有名的大学,那么应该有纪录吧。可是我啥也不知道怎么办?于是先确定【宾州大学的全称】,毕竟象我这样初中毕业的人,怎么可能知道这么高等的大学全称?google一下,全称为:University of Pennsylvania。于是很偷懒的在google里搜索:【nature University of Pennsylvania sleep child】,发现第2条,1999年5月13日就是这篇。打开一看,全英文,看都看不懂,怎么办?直接搜索479,果然页面里有479。文章地址是:https://www.nature.com/articles/news990513-1。文中指出了全文地址是:https://www.nature.com/articles/20094#Bib1,看了一下,要8.99刀。买不起。。。。

借着google的翻译 。然后就着自己那可怜的英文,确实发现了10%,34%,55%等关键字:

XML/HTML代码
  1. Only 10 per cent of infants who slept in darkened nurseries became myopic later on in childhood. This contrasted with a figure of 34 per cent of infants sleeping with a 'night light', and a remarkable 55 per cent of infants who regularly slept with the room lights on.  

但是,这里面有一个很重要的因素:

1、这是民意测验,就象你看到个网页,上面有个调查,你做一下。

2、70%的白人,其他几乎全是黑人,亚洲人1%左右

3、这是对来门诊的人的调查,也就是说这些人是已经近视的。所以才凑满了100%,对那些没有近视或者没有到门诊的人来说,完全就不清楚了。

4、没有完整的说明遗传因素,家长近视的话,对儿童有多少影响也没有提及

文中也提到了,没有亚洲人的数据,不能对亚洲人是否下结论,那么,我就想了。。。。要么,亚洲人就没去过他们医院,要么亚州人,就不会近视?(笑一下)

 

就当随便看看吧。反正这些数据现在已经被全量引用了,就当他是真的吧。如果你睡不着,想不想开灯?反正就算是上面的论文,也是50%/50%的近视概率。。。。毕竟不开灯,你也ne10%的概率 。你看着办喽

 

 

Dcat-Admin 的 multipleSelect和select 在编辑的时候如何赋值?

 Dcat-Admin的multipleSelect和select 在新增的时候,可以通过default()方法给它赋值,但在编辑的时候,不能通过default方法赋值。

1、如果编辑的时候,默认数据库取出来的值,对应着 options中的key,可以直接使用。

2、如果需要调整,比如存到数据库时,是字符串型,但select/multipleSelect的value只能是数组。如果通过->value([$data])赋值也是无效的。只能通过customFormat方法进行赋值。默认的参数就是传进来的值。如果你是字符串,可以explde,如果是对象,可以遍历后返回。

参考 :http://www.dcatadmin.com/docs/master/model-form-fields.html

Dcat-Admin with vue

有时候你不得不承认,DCAT-admin / laravel-admin 做后台是属于比较方便的。你硬要说nova之类的,我也无话可说。但毕竟nova要钱,而且文档并没有国内的全。

为什么说dcat-admin,主要还是laravel-admin好久没有大更新了。然后laravel-admin的多应用要钱。虽然我买了,但更新太慢,我现在还是用dcat了。

很多人在github上面问,为什么不支持VUE。其实也能理解 ,vue如果用了, pjax就不太好用了。但我还是得说,如果你只是简单的,不做特别复杂的应用,还是有办法支持vue的。

首先全局引用JS,Admin::js(),这个不用多说,如果不想全局引用,那就在自己的页面里,将它引用出来就行了。

然后用了个简单的demo,

XML/HTML代码
  1. <div id="sign-form">  
  2.   @{{ form }}  
  3.   <el-input v-model="input" placeholder="请输入内容"></el-input>  
  4.     
  5.   <el-steps :active="active" finish-status="success">  
  6.     <el-step title="步骤 1"></el-step>  
  7.     <el-step title="步骤 2"></el-step>  
  8.     <el-step title="步骤 3"></el-step>  
  9.   </el-steps>  
  10.     
  11.   <el-button style="margin-top: 12px;" @click="next">下一步</el-button>  
  12.   
  13. </div>  
  14. <script>  
  15.   var form = {};  
  16.   new Vue({  
  17.     el: '#sign-form',  
  18.     data() {  
  19.       return {  
  20.         form: form,  
  21.         input: '{{date('Y-m-d H:i:s')}}',  
  22.         active: 0  
  23.       };  
  24.     },  
  25.     mounted() {  
  26.       this.request();  
  27.     },  
  28.     methods: {  
  29.       formReset() {  
  30.         this.form = form;  
  31.       },  
  32.       request() {  
  33.         this.form = {a: 1, b: 2, c: 3, d: 5};  
  34.         {{--laravel.get('{{api_url('union/bind/check/123')}}', res => {--}}  
  35.         {{--  console.log(res);--}}  
  36.         {{--});--}}  
  37.       },  
  38.       next() {  
  39.         if (this.active++ > 2) this.active = 0;  
  40.       }  
  41.     }  
  42.   });  
  43. </script>  

 

保存后,点开网页看看。确实不会再加载了。但这种VUE,就只适合单页面用用了(当然,本身也就是为了在复杂的表单上使用它。也够了)

---差点没有保存。。