这系列教程是翻译官方入门教程。
第一部分:
Hello World
第二部分:
工作队列(Work queues)
第三部分:
发布/订阅(Publish/Subscribe)
第四部分:
路由(Routing)
声明:
此系列教程翻译纯属个人学习笔记,本人英文水平有限,难免会有翻译错误,本文仅供参考。欢迎指正:)
CakePHP提供了一个框架用来创建shell脚本,可是默认情况下不能像正常的B/S开发那样输出调试SQL语句。如果需要在cakephp shell 下输出SQL,可以在shell代码中加入以下方法即可。
function initialize() { Configure::write('debug', 2); $this->_loadDbConfig(); $this->_loadModels(); }
今天在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的错误。
参考官方安装指南: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 命令查看)
makesudo 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的工作线程。
在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并成功运行,暂时发现有什么问题:)
今天要在mac上远程连接Ubuntu桌面,因为使用的协议是rdp,所以我们要装rdp。打开终端:
sudo apt-get install xrdp
装上xrdp之后,再:
sudo apt-get install vnc4server tightvncserver
备份这个操作远远比还原简单得多,没有备份就不可能还原,备份的目的就是为了还原。没有人是为了备份而备份,所以,对还原进行规划是相当重要的。在《高性能MySQL第二版》的第11章中的11.1.2小节有提到以下几点大致如下:
该节还建议置顶还原需求的时候,把以下几个因素考虑进去,并加入系统化文档里,原文如下:
1.
首先要开启SSL模块
sudo a2enmod ssl2.
确认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文件备份到一个安全的地方。
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
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