更新Blog服务器配置

从14年开始使用这台vps服务器,最近发现jetpack出了问题。貌似是更新php版本之后,新的php-xml模块没有安装,尝试更新相关模块的时候首先要更新epel-release,问题是更新了epel-release之后yum命令就挂了,提示找不到xz!

于是问题就演化成了先有鸡还是先有蛋的问题,如果要解决这个问题那么:

  1. 删除epel-release 7,安装6,然后yum安装xz,xz安装成功之后更新epel-release
  2. 直接编译安装xz:
    wget https://sourceforge.net/projects/lzmautils/files/latest/download?source=typ_redirect  
    mv download\?source\=typ_redirect xz.gz tar -zxvf xz.gz  
    make &make install
    
Continue Reading

ngix+uwsgi+django 以及阿里云rds数据库数据导入

网上关于如果通过nginx来运行django的文章还是蛮多的,但是有的地方写的可能不够细致,于是在实际操作的时候可能会出现一些问题,具体可以参考这个链接:https://www.cnblogs.com/frchen/p/5709533.html。但是实际在不熟的时候却发现uwsgi的配置文件貌似不怎么好用,于是去官网看了一下,近习惯了修改:

[uwsgi]
socket = 127.0.0.1:8001
chdir = /var/www/html/
wsgi-file = Project/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

#stats=%(chdir)/uwsgi/uwsgi.status

pidfile=uwsgi.pid

buffer-size = 65536

需要注意的一点是,这个chdir 是项目的根目录,也是工程文件的父目录,后面的wsgi-file则是工程目录和wsgi文件的结合路径,如果这个搞错了,后面的就直接跑不起来了。此时就可以通过uwsgi uwsgi.ini来启动服务了,但是如果此时通过浏览器直接去访问http://192.168.1.100:8001这个地址很有可能是失败的。要配置好nginx的代理之后通过nginx进行访问,nginx配置文件如下:

Continue Reading

django 1452, ‘Cannot add or update a child row: a foreign key constraint fails

网上这个问题搜索的概率非常高,但是实际上解决方法并不是非常完美,例如删除数据库重建什么的。由于刚开始的时候没有设计用户模块,中间添加的用户模块,此时数据库已经有很多数据了,如果删除数据重新创建是显然不可能的,于是搜索了一下,https://blog.csdn.net/qingche456/article/details/58153741 这个帖子中的方法确实能够解决问题,但是并不是十分完美,作为一个强迫症患者,一定要解决这个问题,而不是用这种投机取巧的办法。

我这里出现这个问题的原因在于,新建的用户表用户数量已经超过了原有的auth_user数据数量,所以外键已经无法获取到正确的用户id。原始的约束如下

ADD CONSTRAINT `django_admin_log_user_id_52fdd58701c5f563_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`);

而我新创建的用户model为h4ckUser_hackuser,于是新创建的用户都会增加到h4ckUser_hackuser表中,而不是默认的auth_user表中。要解决这个问题就需要修改外键约束,我用phpmyadmin
后台发现无法修改这些数据。于是只好重建一个新表,然后将两个表名称替换。此时这个问题就完美解决了,新建的表注意将上面的代码改成
ADD CONSTRAINT `django_admin_log_user_id_52fdd58701c5f563_fk_auth_user_id` FOREIGN KEY (`user_id`) REFERENCES `h4ckUser_hackuser` (`id`);
此时在后台新建用户以及各种操作就完全没有问题了,日志系统也会正常进行记录。
另外如果migrate失败,可以尝试删除migration下最后生成的文件,同时对数据库中新增加的数据进行删除。然后重新直接make migraions和migrate,为了稳妥还是最好天前进行系统备份,例如快照系统和mysql备份。

discuz x3.x 论坛图片不显示 none.gif

废话不多说,我遇到的情况是换了模版之后图片就不显示了。于是感觉是js出了问题,搜索图片的标签名称,找到了两个不同的js。并且在正在使用的js里面中文乱码了,如下图。解决方法也很简单,直接上传原始js替换掉现在使用的js。出现这个问题的原因在于模版转换工具从gbk转到utf的时候出了问题,事实上js文件不用转换。

另外如果遇到同样的问题,也有可能是别的原因导致的,如果切换模版之后出现上面的状况,可以参考我的方法。另外的原因请参考这个链接;

https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=discuz+%E5%9B%BE%E7%89%87%E4%B8%8D%E6%98%BE%E7%A4%BA+none.gif

certbot-auto 阿里云配置安装

在国内的服务器上配置任何的服务都要费一番折腾,首先,国内的服务器连接国外的更新源本身就有问题。效率低还可以忍受,但是直接连不上服务器这个就没什么办法了,只能更换更新源。在《阿里云蛋疼的pip》一文中为了能够正常的使用pip,替换了默认的服务器,修改成了http://mirrors.aliyun.com/pypi/simple/ 这个源,但是也是忧郁这个蛋疼的源出现了各种问题。

在执行

./path/to/certbot-auto renew --quiet --no-self-upgrade

的时候会提示很多错误信息,找不到各种lib。

Had a problem while installing Python packages.

pip prints the following errors: 
=====================================================
Collecting argparse==1.4.0 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 11))
  Downloading http://mirrors.aliyun.com/pypi/packages/f2/94/3af39d34be01a24a6e65433d19e107099374224905f1e0cc6bbe1fd22a2f/argparse-1.4.0-py2.py3-none-any.whl
Collecting pycparser==2.14 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 17))
  Downloading http://mirrors.aliyun.com/pypi/packages/6d/31/666614af3db0acf377876d48688c5d334b6e493b96d21aa7d332169bee50/pycparser-2.14.tar.gz (223kB)
Collecting cffi==1.4.2 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 21))
  Downloading http://mirrors.aliyun.com/pypi/packages/92/00/c8670a2898ab7121cdac3b59f4307977a86e08a59efd662f6c05200a2f11/cffi-1.4.2.tar.gz (365kB)
Collecting ConfigArgParse==0.10.0 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 38))
  Downloading http://mirrors.aliyun.com/pypi/packages/d0/b8/8f7689980caa66fc02671f5837dc761e4c7a47c6ca31b3e38b304cbc3e73/ConfigArgParse-0.10.0.tar.gz
Collecting configobj==5.0.6 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 40))
  Downloading http://mirrors.aliyun.com/pypi/packages/64/61/079eb60459c44929e684fa7d9e2fdca403f67d64dd9dbac27296be2e0fab/configobj-5.0.6.tar.gz
Collecting cryptography==1.5.3 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 42))
  Downloading http://mirrors.aliyun.com/pypi/packages/6c/c5/7fc1f8384443abd2d71631ead026eb59863a58cad0149b94b89f08c8002f/cryptography-1.5.3.tar.gz (400kB)
Collecting enum34==1.1.2 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 65))
  Downloading http://mirrors.aliyun.com/pypi/packages/6f/e9/08fd439384b7e3d613e75a6c8236b8e64d90c47d23413493b38d4229a9a5/enum34-1.1.2.tar.gz (46kB)
Collecting funcsigs==0.4 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 68))
  Downloading http://mirrors.aliyun.com/pypi/packages/5e/9f/025d4c92c6a1a94313cdf0813cd76f5700f8e5434fa15165090a6446ae22/funcsigs-0.4-py2.py3-none-any.whl
Collecting idna==2.0 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 71))

  Downloading http://mirrors.aliyun.com/pypi/packages/7c/75/b566d769455929ee6ab308d8a1c6c5aecc4928e72b25d42dd019c99f7015/idna-2.0-py2.py3-none-any.whl (61kB)
Collecting ipaddress==1.0.16 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 74))
  Downloading http://mirrors.aliyun.com/pypi/packages/23/6a/813ac29a01e4c33c19c2bded98ac3d4266ebbf0bd2c0eb0020e1c969958d/ipaddress-1.0.16-py27-none-any.whl
Collecting linecache2==1.0.0 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 77))
  Downloading http://mirrors.aliyun.com/pypi/packages/c7/a3/c5da2a44c85bfbb6eebcfc1dde24933f8704441b98fdde6528f4831757a6/linecache2-1.0.0-py2.py3-none-any.whl
Collecting ordereddict==1.1 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 80))
  Downloading http://mirrors.aliyun.com/pypi/packages/53/25/ef88e8e45db141faa9598fbf7ad0062df8f50f881a36ed6a0073e1572126/ordereddict-1.1.tar.gz
Collecting parsedatetime==2.1 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 82))
  Downloading http://mirrors.aliyun.com/pypi/packages/85/1f/13fc06097e516f6259d62cea502b116451321c96e18a9d0fff9da3442e02/parsedatetime-2.1-py2-none-any.whl
Collecting pbr==1.8.1 (from -r /tmp/tmp.eLMZJv8t9Y/letsencrypt-auto-requirements.txt (line 85))
Continue Reading

Apache2 Django {“detail”:”Authentication credentials were not provided.”}

其实项目已经是很久之前就完成了,部署到服务器上去之后后续的工作由于懒散一致没做,近几天开始进行重新继续项目之后发现一个很蛋疼的问题,在iOS端提交数据的时候提示:

{“detail”:”Authentication credentials were not provided.”},搜索之后发现原来是mod_wsgi转发数据的时候将authorization header 去掉了,所以会导致认证失败。可以参考链接:

http://stackoverflow.com/questions/26906630/django-rest-framework-authentication-credentials-were-not-provided

修复也很简单,修改/etc/apache2/apache2.conf文件添加如下一行即可:

WSGIPassAuthorization On

WordPress 4.2.1 gravatar头像无法显示

升级wordpress 之后去按照以前的方法找服务器设置,发现找不到了。蛋疼啊,但是最近又有点忙,所以一直没管它,今天搜索了一下发现新的头像服务器函数已经移动到”\WordPress4.2.1\wp-includes\link-template.php”(3604,29): $url = sprintf( ‘http://%d.gravatar.com/avatar/%s’, $gravatar_server, $email_hash );这里来了,如下:

	if ( $email_hash ) {
		$args['found_avatar'] = true;
		$gravatar_server = hexdec( $email_hash[0] ) % 3;
	} else {
		$gravatar_server = rand( 0, 2 );
	}

	$url_args = array(
		's' => $args['size'],
		'd' => $args['default'],
		'f' => $args['force_default'] ? 'y' : false,
		'r' => $args['rating'],
	);

	$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );

	$url = add_query_arg(
		rawurlencode_deep( array_filter( $url_args ) ),
		set_url_scheme( $url, $args['scheme'] )
	);

修改也很简单,将上面的3604行修改为:

$url = sprintf( 'http://1.gravatar.com/avatar/%s', $email_hash );

那个服务器编号可以多试几个,测试的时候发现1是没有问题的,如果不能访问可以换2,3,4神马的。