RabbitMQ中文入门教程

这系列教程是翻译官方入门教程

第一部分:
Hello World
第二部分:
工作队列(Work queues)
第三部分:
发布/订阅(Publish/Subscribe)
第四部分:
路由(Routing)
声明:
此系列教程翻译纯属个人学习笔记,本人英文水平有限,难免会有翻译错误,本文仅供参考。欢迎指正:)

发表在 RabbitMQ | 标签为 , , , , , , , , , , , , , | 留下评论

Cakephp调试shell-输出SQL

CakePHP提供了一个框架用来创建shell脚本,可是默认情况下不能像正常的B/S开发那样输出调试SQL语句。如果需要在cakephp shell 下输出SQL,可以在shell代码中加入以下方法即可。

function initialize() {
    Configure::write('debug', 2);
    $this->_loadDbConfig();
    $this->_loadModels();
}
发表在 cakephp, PhP | 标签为 , , , , , | 留下评论

cakephp中action名为validate时提示missing action错误

今天在cakephp项目中写了一个名为validate的action,运行后却提示missing action错误。仔细看了源码(cake/libs/controller/controller.php)之后找到了原因。见以下代码:

// cake/libs/controller/controller.php
function __construct() {
    // 省略n行代码......
    $childMethods = get_class_methods($this);
    $parentMethods = get_class_methods('Controller');
    // 省略n行代码......
 
    // 重点就在这里,原来cake把子类controller中与超类controller重复命名的方法去出了
    $this->methods = array_diff($childMethods, $parentMethods);
}

在/cake/dispatcher.php中

// cake/dispatcher.php
function _invoke(&$controller, $params) {
    // 省略n行代码......
    $methods = array_flip($controller->methods);
 
    if (!isset($methods[strtolower($params['action'])])) {
        // 显示missing action
    }
}

总结:子类controller中action不能与Controller类的方法名重名。否则会报missing action的错误。

发表在 cakephp, PhP | 标签为 , , , , , , | 留下评论

Mac下安装HandlerSocket

参考官方安装指南:https://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/blob/master/docs-en/installation.en.txt

下载与已经安装的mysql同版本号的源码和handlersocket的源码。

我本机的mysql源码目录:
/Users/luadam/Downloads/database/mysql/mysql-5.5.13
handlersocket源码目录:
/Users/luadam/Downloads/database/handlersocket/ahiguti-HandlerSocket-Plugin-for-MySQL-d2979f3

进入handlersocket的源码目录下运行以下命令:

./autogen.sh
./configure \
--with-mysql-source=/Users/luadam/Downloads/database/mysql/mysql-5.5.13 \
--with-mysql-bindir=/usr/local/mysql/bin \
--with-mysql-plugindir=/usr/local/mysql/lib/plugin

–with-mysql-source 参数是指向mysql源码目录
–with-mysql-bindir 参数是指向mysql二进制文件的目录(我使用dmg文件安装的msql,所以是/usr/local/mysql/bin目录)
–with-mysql-plugindir 参数指向mysql插件的目录(如果不清楚目录在哪里,可以使用mysqladmin variables | grep plugin 命令查看)

make
sudo make install

将以下配置添加到my.cnf中
 [mysqld]
  loose_handlersocket_port = 9998
    # the port number to bind to (for read requests)
  loose_handlersocket_port_wr = 9999
    # the port number to bind to (for write requests)
  loose_handlersocket_threads = 16
    # the number of worker threads (for read requests)
  loose_handlersocket_threads_wr = 1
    # the number of worker threads (for write requests)
  open_files_limit = 65535
    # to allow handlersocket accept many concurrent
    # connections, make open_files_limit as large as
    # possible.

登录mysql,运行下面的命令:
install plugin handlersocket soname ‘handlersocket.so’;

运行成功后,运行“show processlist”命令可以看到handersocket的工作线程。

发表在 linux, mysql | 标签为 , , , , | 留下评论

在MAC中安装httpsqs

在MAC中安装httpsqs并不像在ubuntu中那样顺利,安装libevent和tokyocabinet都没有问题,在编译httpsqs的时候却遇到了几个问题。

问题1
编译httpsqs(运行make命令的时候),提示错误信息如下:
ld: library not found for -lcrt0.o
collect2: ld returned 1 exit status
解决方法:编辑httpsqs中的Makefile文件,删除 –static参数。
参考资料:http://stackoverflow.com/questions/3801011/ld-library-not-found-for-lcrt0-o-on-osx-10-6-with-gcc-clang-static-flag

问题2
解决完 –static参数的问题之后,继续运行make命令,提示错误信息如下:
ld: library not found for -lrt
collect2: ld returned 1 exit status
解决方法:编译httpsqs中的Makefile文件,删除 -lrt参数。
参考资料:http://stackoverflow.com/questions/1505402/library-not-found-for-lrt-with-qtcreator-mac-os

这样就成功编译完httpsqs并成功运行,暂时发现有什么问题:)

发表在 linux | 标签为 , , , , , , , , | 留下评论

ubuntu开启远程桌面

今天要在mac上远程连接Ubuntu桌面,因为使用的协议是rdp,所以我们要装rdp。打开终端:

sudo apt-get install xrdp

装上xrdp之后,再:

sudo apt-get install vnc4server tightvncserver
发表在 linux | 留下评论

数据库的还原

备份这个操作远远比还原简单得多,没有备份就不可能还原,备份的目的就是为了还原。没有人是为了备份而备份,所以,对还原进行规划是相当重要的。在《高性能MySQL第二版》的第11章中的11.1.2小节有提到以下几点大致如下:

  • 在你分析你的还原需求之前,不应该搭建你的备份系统
  • 你应该特意去演练你的还原过程,直到还原过程与你的备份过程一样流畅为止
  • 备份一般不是在压力很大的时候进行的,可是进行还原的时候可能就是十万火急,所以说还原是非常重要的一点都不夸张
  • 不要过分加密你的数据,导致需要还原的时候没有人可以解密你的数据
  • 你应该要为了还原而培养几个人,这样就不会找一个不合适的人去还原你的数据

该节还建议置顶还原需求的时候,把以下几个因素考虑进去,并加入系统化文档里,原文如下:

  • 在产生严重后果前,你会丢失多少数据?你需要及时点(Point-In-Time)还原吗?或者说把最近一次正式备份以来的所有数据都丢失了,你能接受吗?有法律上的麻烦吗?
  • 还原需要多块?哪一种故障停工可以被你接受?哪种影响(比如局部不可用)对于你的应用和用户能够被接受吗?当上述场景发生时,你要构建怎么样的功能来维持系统的原有机能?
  • 你确实需要还原吗?通常的需求是还原整个服务器、一个单独的数据、一张表、或者是一些指定的事物或语句。
发表在 mysql | 标签为 , , , , | 留下评论

apache中配置ssl应用

参考: 如何创建一个自签名的SSL证书用于测试?

1.
首先要开启SSL模块

    sudo a2enmod ssl

2.
确认OpenSSL已经被正确安装,并且openssl可执行文件位于PATH环境变量所包含的目录中。
运行下面的命令来创建server.key和server.crt文件:

openssl req -new -x509 -nodes -out server.crt -keyout server.key

然后在httpd.conf中这样使用它们:
SSLCertificateFile /path/to/this/server.crt
SSLCertificateKeyFile /path/to/this/server.key

注意:你必须确保server.key文件没有被加上密语保护。如果你确实想对上面得到的私钥加上密语进行保护,可以使用下面的命令,并按屏幕提示连续输入两次相同的字符串作为密语。

openssl rsa -des3 -in server.key -out server.key.new
mv server.key.new server.key

请务必将你输入的密语和server.key文件备份到一个安全的地方。

发表在 apache, linux | 留下评论

Running shell as cronjobs in cakephp

在cakephp中实现定时执行脚本

cakephp提供了方便的方法来实现定时执行脚本的功能,官方文档有详细的说明,按照文档所说,在cron中添加如下命令:

*/5 *   *   *   * /full/path/to/cakeshell myshell myparam -cli /usr/bin -console /cakes/1.2.x.x/cake/console -app /full/path/to/app

这样看来还是比较冗长,而且不同的项目还要配置不同的路径。于是今天花了点时间写了个shell脚本,便于减少部署人员的的“工作量”,脚本命名为cakescript,代码如下:

#!/bin/bash
#: Title        : cakescript
#: Date         : 2011.05.23
#: Author       : adam
#: Version      : 0.0.1
#: Description  : for easing use cron script in cakephp framework
#: Options      : $1:project path $2:script name
#: Useage       : sh cakescript.sh [project path, script]
 
if [ $# -ne 2 ]; then 
    echo "error params!"
    echo "Useage: sh cakescript cake_project_path script_name"
    exit
fi
 
CAKE_PROJECT_ROOT=$1
 
CAKE_VENDORS_PATH="$CAKE_PROJECT_ROOT/app/vendors"
 
CAKE_APP_PATH="$CAKE_PROJECT_ROOT/app"
 
CAKE_CONSOLE_PATH="$CAKE_PROJECT_ROOT/cake/console"
 
cmd="$CAKE_VENDORS_PATH/cakeshell $2 -cli /usr/bin -console $CAKE_CONSOLE_PATH -app $CAKE_APP_PATH" 
 
$cmd

这个脚本可以放置任意有权限执行的目录下,调用方法如下:

*/5 *   *   *   * /full/path/to/cakescript /path/to/project scritp_name

cakescript脚本调用了一个叫cakeshell的脚本,具体可以参考上文提到的官方文档链接。cakescript需要两个参数,第一个参数是指定cake项目的根目录,第二个参数是要执行的脚本名称。

写到这里,觉得如果吧cakeshell脚本直接整合到cakescript脚本中会更好,有时间再整理:)

update at 2011.07.24

终于有时间整合了一下cakeshell和cakescript脚本,命名为cake_script。原来的脚本是只提供两个参数(cake项目名,脚本名),现在可以为脚本添加参数。现在整理后的代码如下:

#!/bin/bash
#: Title : cakescript
#: Date : 2011.07.24
#: Author : adam
#: Version : 0.0.2
#: Description : for easing use cron script in cakephp framework
#:               test in ubuntu 10.10, mac osx lion
#: Options : $1=project path $2=script name
#: Useage : sh cakescript.sh [project path, script]  
 
if [ $# -lt 2 ]; then
    echo "error params!"
    echo "Useage: sh cakescript cake_project_path script_name"
    exit
fi
 
CAKE_PROJECT_ROOT=$1
cmd="cake $2"
shift
shift
 
 
CAKE_APP_PATH="$CAKE_PROJECT_ROOT/app"  
 
CAKE_CONSOLE_PATH="$CAKE_PROJECT_ROOT/cake/console"  
 
PATH=$CAKE_CONSOLE_PATH:$PATH
 
while [ $# -ne 0 ]; do
    cmd="${cmd} $1"
    shift
done
 
cmd="${cmd} -app $CAKE_APP_PATH"
$cmd
发表在 cakephp, PhP | 标签为 , , , | 留下评论

install latest stable version of nginx on ubuntu

ubuntu下安装nginx(v1.0.2)
安装nginx的rewrite模块,需要安装pcre相关库,使用如下命令:

apt-get install libpcre3 libpcre3-dev
sudo -s
nginx=stable # use nginx=development for latest development version
echo "deb http://ppa.launchpad.net/nginx/$nginx/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-$nginx-lucid.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update 
apt-get install nginx
发表在 linux, nginx | 标签为 , , | 留下评论