本篇主要记录一些小技巧或者开发过程中遇到的小问题和解决方案。这些问题实在太小了而且大部分可能和代码没有关系,不好每次都单独列一篇文章,所以放到一起了。

在eclipse中设置字体

在eclipse中设置 Windows->Preferences->General->Appearance->Color and Fonts->Basic->Text Font->Edit->脚本(R) 选择 中欧字符 后中文字体的显示能够更好看些。

处理 nginx + php 遇到后端返回413错误

php 默认上传文件大小限制为 2M,如果超出 2M 你需要修改 php 配置文件 php.ini 里面的参数

1
2
post_max_size = 128M ## (表单提交的最大限制,此项不是限制上传单个文件的大小,而是针对整个表单提交的数据进行限制)
upload_max_filesize = 128M ## (上传的单个文件的最大限制)

需要保证 post_max_size >= upload_max_filesize ,也就是前者不小于后者。修改之后一定要重启 php-fpm (service php-fpm restart)。

除了修改 php 配置,你也需要修改nginx配置文件 nginx.conf
打开 nginx 配置文件 nginx.conf,找到 http{} 段,在其中添加一行配置:
client_max_body_size 128m; 其中 128m 可以根据需要上传文件大小自行设定。
修改之后一定要重新载入 nginx (service nginx reload)。

导入/导出 csv文件到mysql

导入

需要表存在且字段与csv文件中的相同

1
2
3
4
5
6
7
8
9
LOAD DATA LOCAL INFILE '${csv文件路径}'
INTO TABLE ${数据库表名}
CHARACTER SET utf8
FIELDS
TERMINATED BY ','
ENCLOSED BY '"'
LINES
TERMINATED BY '\n'
IGNORE 1 ROWS;

导出

1
2
3
4
5
6
7
8
LOCK TABLES ${数据库表名} read;
SELECT * FROM ${数据库表名} INTO OUTFILE '${csv文件路径}' 
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES
TERMINATED BY '\n';
UNLOCK TABLES;

导出csv文件到mysql报错

Error 1148

如果在执行语句时报错 Error 1148 MySQL The used command is not allowed with this MySQL version 可能是因为MySQL的安全策略阻止读取本地文件,可以通过以下方法解决:

  1. Use –local-infile=1 argument on the mysql commandline:

When you start MySQL on the terminal, include –local-infile=1 argument, Something like this:

1
2
3
4
mysql --local-infile=1 -uroot -p

mysql>LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
COLUMNS TERMINATED BY '\t';

Then the command is permitted:

1
2
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
  1. Or send the parameter into the mysql daemon:
1
mysqld --local-infile=1
  1. Or set it in the my.cnf file (This is a security risk):

Find your mysql my.cnf file and edit it as root.

Add the local-infile line under the mysqld and mysql designators:

1
2
3
4
5
[mysqld]
local-infile

[mysql]
local-infile

Save the file, restart mysql. Try it again.

  1. The main reason why we are using the LOCAL keyword is explained in the MySQL manual. On the other hand, you do not need the FILE privilege to load local files. So if you in fact do have file access to the server then try to skip using the word “LOCAL” in SQL query, and instead copy the file to the server and the directory mysql/data/[tablename].

Error 1290

如果在执行语句时报错 [Error Code] 1290 - The MySQL server is running with the --secure-file-priv option 说明参数secure-file-priv 可能有问题

执行以下语句

1
SHOW VARIABLES LIKE "secure_file_priv";

可以看到

1
2
3
secure_file_prive=null   -- 限制mysqld 不允许导入导出
secure_file_priv=/tmp/ -- 限制mysqld的导入导出只能发生在/tmp/目录下
secure_file_priv='' -- 不对mysqld 的导入/导出做限制

可以在 my.ini(windows) 或 /etc/my.cnf(linux) 文件中的[mysqld]节点添加secure_file_priv=’’,然后重启mysql服务

启动mysql报错error: 11

如果在启动mysql时遇到了 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
说明 ibdata1 文件被其他的进程占用 或者 磁盘空间目录不足,有以下解决方案:

  1. 查看磁盘空间情况
1
df -h
  1. 查看系统 mysql 相关进程
1
2
ps -eaf | grep mysql
kill -9 78806

如果语句执行正常但是返回 0 row(s) affected ,查看一下csv中的字段是否是否与表中的字段一致,区分大小写;查看一下csv文件的分隔符的设置是否正确。

处理 mongoose 中 bson MODULE_NOT_FOUND 相关报错

node.js 在使用 mongoose时报错 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND'

参见 https://github.com/Automattic/mongoose/issues/3436

应该是mongoose版本问题,理论上升级到最新版本可以解决,也可以按照以下步骤解决

  1. 更改 bson 引用
    找到 module mongodb ..node_modules\mongodb\node_modules\bson\ext\index.js
    改变bson引用的路径
    1
    bson = require('../build/Release/bson');
    改为
    1
    bson = require('../browser_build/bson');
    1
    bson = require('bson');
  2. 更改mongoose版本
    将原有的mongoose升级为 "mongoose ": "~3.8.23"

Python 报错 ‘ascii’ codec can’t encode characters in position 0-8:ordinal not in range(128)

  1. 第一步,别忘了给文件顶部加上
1
# -*- coding: utf-8 -*-
  1. 重新载入SYS模块并设置uft-8
1
2
3
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

使用nvm的前置脚本

1
2
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

快速启用httpserver

1
python -m SimpleHTTPServer 8080

启动 mongodb 数据库服务

1
mongod --dbpath=/users/

启动 redis 数据库

1
redis-server