分类 "编程开发" 的存档.

nginx下配置安装在线客服系统mibew

mibew是一个用php、mysql实现的开源在线客服系统,可以方便的集成到现有的网站系统中。客服人员和客户都可以直接通过浏览器进行沟通交流,无需安装额外的客户端或插件。关于mibew更加详细的介绍飞尘这里就不多啰嗦了,用到的朋友自行查阅吧。

从mibew官方网站https://mibew.org下载最新版本的安装包,目前最新的是2.0.0-bata.5,当然也有1.6.x的稳定版本,根据个人需要选择下载即可。

下载好解压安装包到任意目录,比如mibew/,在该目录的下README.txt文件中提供了详细的安装步骤,虽然是英文,但是比较简单,就不翻译了。不过几个注意点说明一下:

1. 中文语言包需要另外下载,解压到mibew/locales/下
2. 数据库需要先创建好,地址、用户名、密码需要手动在config.yml文件中配置。
3. config.yml配置文件默认缓存方式为file_system,windows下受到文件名长度的限制会有问题,如果没有性能方面的考虑,这里设置为storage: none
4. 可设置默认语言为中文

# Locales
## Native name will be used in this locale
home_locale: zh-cn
## If user does not provide known lang
default_locale: zh-cn

5. 配置好后通过浏览器访问安装http://yourdomain/mibew/install.php,README文档里没有写php的扩展名

windows平台下安装比较容易,linux系统下可能需要注意一些文件的权限设置。

mibew自身提供了.htaccess配置文件,安装到apache服务器中几乎不用修改什么配置。但是笔者这里没有使用apache,web服务器是nginx,所以使用浏览器访问http://yourdomain/mibew/install.php时就出现问题了,页面自动跳转到http://yourdomain/mibew/install.php/install/check-requirements,自然显示404了,nginx找不到文件。

看了一下.htaccess配置文件,的确是用rewrite规则的,这个需要在nginx中相应的配置一下,虽然获得正确规则配置的过程曲折了一些,但是结果是令人满意的,先看一下成功的配置吧

# 假设mibew安装在子目录mibew中
rewrite ^/mibew/$ /mibew/index.php permanent;
rewrite ^/mibew/install\.php/(.*)$ /mibew/install.php?$1 last;
rewrite ^/mibew/index\.php/(.*)$ /mibew/index.php?$1 last;

看上去真的好简单哦,但是得到的过程却不简单,先是使用.htaccess转换工具,又google了一番未果,只能自己丰衣足食,其实最主要的问题是rewrite与location的组合,开始尝试的配置是这样的

location /mibew/ {
rewrite ^/mibew/install\.php/(.*)$ /mibew/install.php?$1 last;
rewrite ^/mibew/index\.php/(.*)$ /mibew/index.php?$1 last;
}

安装没有问题,但是使用的时候添加了一个客服人员,在上传头像时死活就是404,都是伪静态的链接,
http://yourdomain/mibew/install.php/operator/operator/2/edit这个正常访问,但是http://yourdomain/mibew/install.php/operator/operator/2/avatar这个就是404,搞了半天还是搞不定,最后把location段删除了,rewrite直接放在server段,然后就神奇了。至于配合location怎么弄,期待你的高见。。。

nodejs生成md5摘要加密

在使用nodejs开发过程中,使用到了crypto模块进行md5加密,但是发现一个问题,就是有中文时加密信息与标准md5计算出的结果不一致,网上大概查了一下,好像是编码什么的问题,具体不去纠结它了,最要紧的是需要保持一致的加密算法。

找了一下,最终选择了之前在js开发中曾经使用过的crypto-js,现在node里也有实现了,于是拿来测试一下看看,结果如愿以偿。

下面给出的一段例子可以对比这两者生成的摘要信息,感兴趣的话可以修改text为英文字符串,看看加密后的结果是不是一样的呢?

ubuntu下xampp忘记mysql密码重置

之前在ubuntu 12.04里安装了xampp,设置了mysql数据库root密码,今天需要增加个数据库,发现忘记之前设置的密码是什么了。经过一番摸爬滚打,终于搞明白了,注意以下的操作都是以linux的root身份操作的,其它的未测试,目测只要权限允许应该没问题。

先停止mysql
/opt/lampp/lampp stopmysql

接着这样启动mysqld
/opt/lampp/sbin/mysqld --skip-grant-tables &

会看到类似这样的输出

2014-04-29 10:54:43 25686 [Note] /opt/lampp/sbin/mysqld: ready for connections.
Version: ‘5.6.16’ socket: ‘/opt/lampp/var/mysql/mysql.sock’ port: 3306 Source distribution on

此时光标可能会停在on后,没有回到提示符状态,那么就先敲一下回车,然后就回到命令提示符状态了。
接下来,就可以空密码root登录到mysql数据库了
/opt/lampp/bin/mysql -u root

赶紧设置为新的root密码吧

mysql> use mysql;
mysql> update user set password=PASSWORD(“123456”) where User=’root’;
mysql> flush privileges;
mysql> quit

重启mysql
/opt/lampp/lampp stopmysql
/opt/lampp/lampp startmysql

mybatis查询传递Integer类型参数报错

使用mybatis查询数据库,在传递Integer类型参数时,遇到下面的错误:

Servlet.service() for servlet [spring] in context with path /] threw exception [Request processing failed;
nested exception is org.mybatis.spring.MyBatisSystemException:
nested exception is org.apache.ibatis.reflection.ReflectionException:
There is no getter for property named ‘abc’ in ‘class java.lang.Integer’]

解决方法有两种:

一是将参数名称 “abc” 替换为”_parameter”。

二是在接口中定义方法时添加标注@Param(“abc”)

linux执行shell脚本,提示“没有那个文件或目录”

linux执行shell脚本,提示“没有那个文件或目录”

终端直接cd /var正常
shell脚本中执行则报错

原因是脚本是在windows平台下写的,换行符与linux不同,造成脚本不能正确执行。

windows是CR+LF
Unix/linux是LF
Mac是CR

通过html5方法无刷新变更页面url地址

通过html5方法无刷新变更页面url地址,基于安全的要求,url是不可以跨域的

pushState()方法接受三个参数

状态对象(state object) — 一个JavaScript对象,与用pushState()方法创建的新历史记录条目关联。无论何时用户导航到新创建的状态,popstate事件都会被触发,并且事件对象的state属性都包含历史记录条目的状态对象的拷贝。

任何可序列化的对象都可以被当做状态对象。因为FireFox浏览器会把状态对象保存到用户的硬盘,这样它们就能在用户重启浏览器之后被还原,我们强行限制状态对象的大小为640k。如果你向pushState()方法传递了一个超过该限额的状态对象,该方法会抛出异常。如果你需要存储很大的数据,建议使用sessionStorage或localStorage。

标题(title) — FireFox浏览器目前会忽略该参数,虽然以后可能会用上。考虑到未来可能会对该方法进行修改,传一个空字符串会比较安全。或者,你也可以传入一个简短的标题,标明将要进入的状态。

地址(URL) — 新的历史记录条目的地址。浏览器不会在调用pushState()方法后加载该地址,但之后,可能会试图加载,例如用户重启浏览器。新的URL不一定是绝对路径;如果是相对路径,它将以当前URL为基准;传入的URL与当前URL应该是同源的,否则,pushState()会抛出异常。该参数是可选的;不指定的话则为文档当前URL。

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
replaceState, pushState 5 4.0 (2.0) 10 11.50 5.0
history.state 18 4.0 (2.0) 10 11.50 6.0

关于history对象的详细说明可以参考mozilla的文档
https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history

下面是个简单的小例子: