??xml version="1.0" encoding="utf-8" standalone="yes"?>
A的安装和配置如下Q?br />1. apt-get install rsync 可能提示pȝ已经安装有了
2. 配置文g/etc/rsyncd.conf
默认安装时是不会有这个配|文件的Q但是可?cp /usr/share/doc/rsync/examples/rsyncd.conf /etc 把它CZ中的配置文g拯q来
vi /etc/rsyncd.conf q里参数有点多,但是有些可以先不,x重点?br /> [ftp] q里是模块,可以配置多个Q这个是pȝ默认l出的一个配|,下面l一个本Z的配|示例:
--------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
q里Q最上面的是pid文g位置。然后配|了一个模块名叫做shareQ最大连接数?Qread only = noQ指定ؓ非只读(不然同步时会有权限问题)
而后面的auth users = rsync 是指定一个同步的账户名叫做rsyncQ这个̎L认证文g?etc/rsyncd.secretsQ当然我们要创徏q个文g
3. 创徏 /etc/rsyncd.secrets文gQ内容ؓQ?rsync:123 表示rsyncq个用户的密码是123 然后修改文g的权?chmod 600 /etc/rsyncd.secrets
4. rsync server做ؓ守护q程
vi /etc/default/rsync
可以看到开头处q样声明Q?br />------------------------------------
做ؓ守护q程Q可以设|ؓtrue或是xinetd方式来启动。于是我们安装inetd sudo apt-get install xinetd
安装好后配置inetd的配|文? vi /etc/xinetd.d/rsync Q输入如下内容:
---------------------------------------------------
-------------------------------------------------------
然后启动xinetdQ?etc/init.d/xinetd restartQA服务器的rsyncd server完成了Q?br />
5. B服务器由于是clientQ不需要配|,也不需要安装xinetdQ直接可以通过命o行执?br />
q个命o可以直接连接到192.168.111的rsync账户Q它会提CZ输入密码Q就是A中的secrets文g中的密码Q然后同步share模块到本机的/var/www/pub目录Q你可以事前在A机器上创Z个文件如test.txtQ随便写点内容,然后执行些命令,看是不是B上多了这样一个文Ӟ如果是,则表C已l连接成功。你接下来就可以做crontab了!
]]>
(1) vim /etc/mysql/my.cnf
L[mysqld]D中 server_id =1 和log_bin=/var/log/mysql/mysql-bin.log?注释
加上 binlog-do-db = s3 s3是要同步的数据库的名称Q如果没有这一行,表示同步所有的数据Q另?binlog_ignore_db = mysql。要表示忽略同步的数据库名称为mysqlQ如果有多个要指定同步或是忽略同步的数据Q就配置多行Q保存退出?br /> (2) 创徏一个复制用的̎?名称为repl,允许从远E连接,密码?23456)Q?
GRANT REPLICATION SLAVE, RELOAD,SUPER, NO *.* TO repl@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
(3) 重启mysql服务Q或是直接reboot机器也可?br /> (4) q入mysqlQ然后用 show master status\G 查看二进制日志的状态,看到cM以下的结果:
+------------------+----------+--------------+------------------+
(1) vim /etc/mysql/my.cnf
L[mysqld]D中 server_id =1 和log_bin=/var/log/mysql/mysql-bin.log?注释Q把server_id改ؓ2Q要和master机器的不一栗ƈ增加以下内容Q?br /> binlog_do_db=s3
log-slave-updates
保存退?br /> (2) 重启mysql服务
(3) q入mysqlQ执?br /> CHANGE MASTER TO MASTER_HOST='192.168.1.111', MASTER_USER='repl',Master_Port=3306,MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1376;
SLAVE START;
注意上面的CHANGE语句中,MASTER_LOG_FILE和MASTER_LOG_POS是上面1.4中提到的show master status命o得到的结果,指定二进制文件的名称和开始同步的位置?br /> (4) 查看SLAVE状? show slave status\G
]]>
服务器装的是centos 6.2Q忘了当初是Z一个用户postgres.postgresq行安装的,用其它用户切换到pg的安装目录下bin/pg_dump是执行不了的Q提C在指定目标下生成导出文件。故猜测应该是postgresq个用户的权限不I
cat /etc/passwd查看一下当前有多少用户Q的有postgres.postgres用户Q密码多?忘了Q反正有rootQ直接passwd修改成新的密码吧Q于是就立马修改了该用户的密码,可以正确切换到postgres用户了,q需要root为postgres指定一个目录有操作权限
chown -R postgres.postgres /var/xxxx
然后再回到pg的bin目录下,执行pg_dump redmine > /var/xxx/redmine.bak
q下l于正常了,别忘了还得去redmine安装目录下,备䆾下files文g夏V?br />
仅以此ؓW记Q以后可以查阅?img src ="http://www.tkk7.com/nighty/aggbug/397077.html" width = "1" height = "1" />
]]>
众所周知QFlex的缺Ҏ开发调试效率较低,而且它只是表现层的一U解x案。在企业应用中最需要解决的是编译生成的swf体积问题Q我想Q何客户都很难接受一个企业应用全部打包在一个swf里,几MB甚至几十MB的初始化q程谁都无法接受Q所以都必不可少地采用Module的加载方式,把不同的业务功能~译成独立的swfQ需要用的时候再d载。把核心功能、通信机制、公q件设计成库项目,~译成swc做ؓRSL让业务模块共享调用,辑ֈ量减少业务模块~译体积的目的。在q方面如果用心优化的话,基本上可以控制到每个swf体积大概?00KB以内Q这样就是互联|方式部|Ԍ客户讉K仍是可以接受的?/span>
该结构图l出了一U整体的设计ҎQFlex的启动肯定得有ApplicationQ这个是用户初登录后W一个加载的swfQ登录就不要用flex了,用jsp或是模板实现吧)。所以它负责加蝲你设计的整个框架Q包含模块加载机制、通信代理方式、基库初始化{等Q而和Java端的通信目前比较有效的仍然是blazedsQ这个技术需要的介绍内容不在本文的范围之内。关于通信接口的实现有一U非常有用的方式是借用Java的动态代理理念,Spring有一个flex的扩展子目叫做springactionscriptQ而这个项目又引用了as3commons的库Q类gapache commons的一些公qӞ。ؓ什么提及这个,因ؓflex本n的反功能api非常隄Q所以as3commons做了扩展,它大大简化了反射的用,而且提供了一个bytecode的工L于操作字节码Q它是实现动态代理的关键。至于ؓ什么要动态代理?目的是辑ֈ在写和JavaҎ的接口时Q可以只声明接口Q不需要实现类Q得减少多少重复代码呀Q)Q而和JavaҎ接口我们又可以开发一个工兯java code 自动转成 as codeQ如果懂得Eclipse插g开发的话还可以q一步做一个插Ӟ辑ֈJava只写一ơ就可以自动生成对应的flex接口Q提高开发效率?/span>
转入正题Q关于单元测试的概念QFlash Builder?.5已经把flex unit作ؓ内置库了Q这点和Eclipse把junit内置cMQ而flex unit的用网上有大量的资料介l,q里也不多说。flex unit在测试as代码q是不错的,和junit试一P提供了一些简单的Assert断言Q但是你最痛苦的却不是as的测试。企业开发的特点是数据量不大,但是需求坑爹,l常变来变去Q而且l构复杂Q往往一张表很多字段Q关联子表,层属性多。而你如果选择了Flex做了展示层的技术,那必定是看中它比HTML + CSS + JS更强的界面交互功能。的,q点不容质疑QFlex Spark的皮肤机制的提供了很多优秀的特点,不过如果你想U熟掌握它的整个机制Q恐怕得花很多时间阅L代码才行Q而皮肤的制作整对别想让美工独自实玎ͼ它同h需要技术积累的Q介l它需要用几个幅才够。Q何技术方案都一PBS、CS、AIR在实现复杂界面时Q对于开发h员来_最痛苦的莫q于界面的单元测试?/span>
痛苦在哪里?回看上面那幅架构图,业务功能界面实现在FlexQ业务逻辑在后台JavaQ那么当二个团队同时q行工作的时候,沟通就是最大的成本。解x通的问题必d先前设计时约定好接口和数据结构,那是会媄响双方团队协调的关键因素。当双方同时q行开发的时候,势必存在前台依赖后台的情况,因ؓ它能到达界面的前提得在整个框架蝲入后Qƈ且可以初始化一堆数据,发生了通信Q,Java后台q好_依赖于spring和junit可以做到很好的单元测试。而flexq苦了Q我没有通讯啥都做不了呀Q?/span>
如何设计单元试Q最大的出发点就是如何切掉和后台通信q接Q看下面的简单结构图
实现思\介绍Q?/span>
1. 化Application加蝲q程 -- 可以套用你主E序中的加蝲q程Q但是不需要你的主界面其它多余的元素,辑ֈ减少到达试界面的多余步骤(可能少地减鼠标和键盘操作Q?/span>
2. 定义试配置 -- 试哪个模块Q哪个工作流E?你得通过配置的方式来定义Q而不是每ơ都手写代码Q才能方便你的成员用你q个工具
3. 模拟后台接口实现 -- 记得上面说的动态代理吗Q其实是为接口动态生成一个实现类Q然后注入真正通信的实C码,例如WebService、HTTPQ既然可以注入这些通信渠道Q当然就可以注入本地实现cd
4. 对象查看?nbsp; -- q个是神马?因ؓ你都不要Java后台了,每次操作一个界面后得提交数据吧Q没有后CQ提交到哪里Q你得必L你的提交对象用界面展C出来吧Q好吧,q个可是个难点!
我想q四个方面的原则无非是Q减单元测试需要进行的步骤Q最快到达测试界面)Q脱dC赖(自己单模拟后台实玎ͼ可惜flex没有cMjava的mock库,悲剧Q)Q如何查看提交到后台的结果?单元试的目标:界面能正常加载、提交数据正常,如果二者都没问题,那么联调的时候就可以非常Ҏ定位到是Flex的问题还是Java的问题!辑ֈ介分责Q的目标,当然Q如果你所在团队是按模块分的,也就是说flex和java都是同一个h做,那么׃存在责Q问题?/span>
怎么实现上面的四个步骤呢Q简要地介绍一下吧?/span>
W?化application加蝲Q其实你可以把第一张图中的application加蝲机制拯q来Q只是主界面可以做得非常单,比如不需要多余的控gQ比如过长的菜单、当前登录h、时间、一陀讄按钮{)Q只留下最核心的能到达你测试界面的入口Q至于怎么设计q个化版的applicationQ那得发挥你本h的创造力Q另外还得看具体的业务?br />
W?定义试配置。模块如何加载?通信接口本地模拟实现cd义?通过配置昄在appliation做ؓ触发控gQ这些你都得自定义一套xml之类的文件来配置吧,q个需要技巧了Q不能设计得太复杂,因ؓ你的开发h员需要沿用你定义的规范来定义它需要测试的模块Q关于这斚w的知识,可以参考spring加蝲配置文g方式、struts2加蝲定义文g{理念,有一个概忉|比较推荐Q就是struts2中的include配置文gQ允讔R|文件分散,让大家提供代码和文g时减冲H,又可以套用你正常的加载机制?br />
W?模拟后台接口实现。这个是比较烦的Q模拟机制本w通过动态代理倒是不难实现Q恶心的是你得自己动手用flex单实Cơ后台生成数据、处理数据的逻辑。这里我有个实践的ȝl验分nQ在前期你调试完的后台接口证明是没有问题的,那么可以混合使用Q一部分调试q的接口可以直接用后収ͼ而新接口才本地模拟。一个原则就是后台有的,已经证明E_的就用后収ͼ没有的或是后台还没有完成的你p己模拟?br />
W?对象查看器。想想flex不能操作数据库、由于安全限制不允许直接操作文g、无法读取本地文件目录。而你的测试数据也怼有关联(特别是在工作方面)Q所以你得想一个方案来保存你的对象l果Q而且得以一Uh性化的方式查看对象内宏V且抛开数据存储的问题,q个对象查看器如何设计就够你头疼的了Q首先是对象得定义成一U格式,一Uh可以看得懂的格式Q比如xmlQ可以支持序列化和反序列化,你得L多余的无用属性和讉K器。又得回到反机制上了,序列化其实不难,隄是反序列化时如何正确地{成原来的对象。列一U本计的l构Q?/span>
<xxx type="com.xx.oo.XXClass">
<aa type="String">aaa</aa>
<bb type="Boolean">true</bb>
<list type="mx.collection.ArrayCollenction">
....
</list>
</xxx>
对象分简单对象、复杂对象、动态对象等Q如何表达这U结构和保证序列化时不丢失数据需要细心考虑。那么最后如何实现查看器呢?其实有一个参考的范例Q就是Eclipse?#8220;大纲”视图Q经q实늚扩展Q把树视图换成表格树Q这U控件原生没有,有第三方的可以拿来修改)Q看个样囑Q?/span>
因ؓ你关注的对象内容无法是q三个方面,属性名、倹{和cdQ又支持以树方式D对象Q已l够你人眼分辩内容了。至于如何有效的保存试数据Qƈ且组l好l构Q这个方面我目前也仍在思考中Q未有较好的思\?/span>
以上内容仅是Z本h的一U方案,也许有更好的实现ҎQ只是水q不以过q种认识Q希望后l能q一步思考能实现更加完美的单元测试框架?/span>
ST试更关注的界面的自动化试Q这斚w涉及的知识更多,一般公司是很难有胦力和技术去支持做自动化试Q属于比较高端的范围Q实现是很多回归都靠试团队在实现?/span>
]]>
q是怎么回事Q根据上面的注释Q感觉应该原因在它的皮肤Q得跟进代码Q看一下究竟?br /> 首先扑ֈ<s:Application>控g的标准SkinQ可以在Flash Builder中直接查看?br />
双击打开ApplicationSkinQ里面的代码包含了各USVG囑Ş学的实现api调用Qflex这些库叫FVGQ大意就是SVG的Flex实现版本Q该库实现得q算z!
Application标准皮肤的就是先M个矩形,然后用一个Group来包含不同的形状Q最后一D?lt;s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0" />Q代表Application的内容区域,Flex从设计上区分了控件树和布局树,有些复杂Q可以参考官方的文档。因为Application是属于容器,所以必d皮肤中包含这一句,不然E序q行时就看不到它包含的子控g?br /> 而前面长长一?lt;s:Group id="topGroup">中是M栏的外观,它用FVG库画了四层:
<!-- layer 0: control bar highlight --> 底部高亮U(用画W填充一个矩形)
<!-- layer 1: control bar fill --> 背景填充U性渐变颜?/span>
<!-- layer 2: control bar divider line --> 分割U?/span>
<!-- layer 3: control bar --> controlBar的具体内容容?/span>
当然q个controlBar不是自己会出现的Q只有当你填充了内容控g的时候它才显C,所以有includeIn="normalWithControlBar, disabledWithControlBar"Q表C在q二个State下才昄Q什么时候State才包含这二个呢?当然Q就得去看Application.as的实现原理,具体幅׃描述?br /> 那么回到最初的问题Q我x变controlBar的位|在下方怎么处理Q?br /> 从上面的分析可知其实controlBar的摆放位|是在Skin中定义的Q而它是什么布局Q它昄不显C是通过Application.as本n的代码控制的Q那么我们就只要自定义Application.as的皮肤就可以Q新Z个外观mxmlQ直接复制官方的ApplicationSkin.mxml的代码,然后Q把<s:Group id="contentGroup" width="100%" height="100%" minWidth="0" minHeight="0" />代码Ud<s:Group id="topGroup">代码的上面,在你的Application中强制指定skinClassZ自定义的ApplicationSkinQ或是通过css讑֮卛_?br /> 再扩展思维一下,其实我们完全可以把controlBar攑ֈ左边或是双Q甚至Q何位|,都取决你在Skin的定义和Application.as的逻辑控制Q你可以l承Application扩展Q?br /> 那么controlBar有什么作用?其实spark的Panel从及它的子类TitleWindow都有controlBar的概念,它能独立于你容器外的区域Q对于你容器本n包含的组件和布局不会产生q扰Q以及你讄了width、height?00%时也不生媄响。如果你不要controlBarQ直接在Application中用布局d一个Group也是可以实现Q但是它从根本上是属于布局树中contentGroup的内容,会受限于布局?br /> Spark Skin的设计的有高明的地方,ҎFlex3的外观,它提供给设计人员的空间实在大得多Q你可以l合囄和FVG库的功能自定义各U外观,当然Q我徏议你多熟悉一下FVG库的应用Q毕竟从外加载图片对flex来说是一个消耗,你的E序也会增肥?/div>
]]>
一个比较方便的ҎQ?/span>
为yumdW三方的源,然后直接用yum -y install php-mysqlq行安装
以下ҎZ|络搜烦到的Q做个记录,斚wȝ之时查阅?/span>
导入地址Q?nbsp; rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
~辑yum源: vi /etc/yum.repos.d/CentOS-Base.repo
在最下面d如下信息Q?br /> [utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
然后执行安装命oQ?yum -y install php-mysql pȝ׃自动从上面添加的源中d合适该版本的php-mysl模块Q安装完成后重启httpd服务Q再讉KOK了?br /> 该方法同样适合于默认安装的php5.1.6版本安装成功后再q行升?5.2版本?/span>
]]>
URL: http://download.jboss.org/jbosstools/updates/stable/helios/ 然后在All JBoss Tools 3.2.0下选择FreeMarker IDEQ其它的大概你不需要都不用,也不影响下蝲旉Q然后一路确认安装就OK!
]]>
而后想了惻I试了各U方式去恢复Q都没有办法Q那么,唯一的办法就是尽量备份原有的数据和文Ӟ重装pȝq行环境的重新搭建。还好有其它方式Q可以先把里面重要的文g都提取了出来。然后在q存的phpmyadmin上赶紧进行mysql相关数据库的备䆾。(注:因ؓ是个人的服务器,所以ƈ没有像公怸样做好运营和备䆾计划Q?br />
W二天决定重装系l了Q管理员用了3个小时才搭徏起CentOS5.5和SSHq程服务端。轮到我和L需要用SSHq行q程的环境搭建。接下来的三天晚上,真是折腾又折腾。计划安装的几个主要软g是:Mysql、PHP、Apache、JDK、Tomcat、Ruby on Rails、Redmine、PHPMyAdmin{?br />
Phusion Passenger模块使得Rails应用可以像PHP模块一栯行在Apache上,非常方便?/span>
准备条gQCentOS服务器已l装好了Apache2.2和Redmine应用
1. 安装Passenger模块
gem install passenger
passenger-install-apache2-module
W二个命令是安装passenger的apache2模块Q它已经做得很智能,会提CZ认安装以及最后怎么配置模块到apache中?/span>
摘出配置D늚内容如下Q?/span>
Please edit your Apache configuration file, and add these lines:
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.7
PassengerRuby /usr/bin/ruby
把红色字体部分拷贝到apache的配|文Ӟ可以是主配置文g/etc/httpd/conf/httpd.confQ也可以是在/etc/httpd/conf.d/目录下新Z个子文g命名为ruby.confQ推荐第二种方式Q更为简z,不会影响L件的配置?/span>
2. 先测试一下passenger是否安装正常
切换到redmine的安装目录下Qpassenger start 命o试一下是否正常能以paasenger方式启动Q如果没有异常,恭喜Q已l安装完成,剩下的工作就是配|一个虚拟主机和子给你的redmineQ这样可以{到更为常用的80端口上?/span>
3. 配置rails应用做ؓsub URI模式
在passenger的官Ҏ档中其实有好几种配置的方式,可以是域名、域名子URI{,很多时候你可能只有一个域名,那么利用sub URI来挂不同的应用就昑־比较
首先配置一D虚拟主机如下:
<VirtualHost *:80> ServerName www.phusion.nl DocumentRoot /websites/phusion <Directory /websites/phusion> Allow from all </Directory> </VirtualHost>
解释一下过E大致是先创Z个硬链接Q如下:
ln -s /webapps/mycook/public /websites/phusion/rails
/webapps/mycook/public是你的rails的应用目录下面的public目录Q例如你的redmine安装?var/www/htmlQ这个目录就?br /> /var/www/html/redmine/publicQ后面就是你Apacheȝ录下的创建的一个链接地址railsQ意思就是把/var/www/html/redmine/public
链接?var/www/html/railsQ?var/www/html/rails是实际上不存在的?br /> 然后再配|子目录如下Q?/pre>
<VirtualHost *:80> ServerName www.phusion.nl DocumentRoot /websites/phusion <Directory /websites/phusion> Allow from all </Directory>
RailsBaseURI /rails # <-- These lines have <Directory /websites/phusion/rails> # <-- been added. Options -MultiViews # <-- </Directory> # <-- </VirtualHost>最后四句带#注释说明是重点,应用RailsBaseURI命o把rails子URI指定到rails的应用目录,而rails目录是我们上面链接的目录,而实际上会蟩到我们的直接redmine目录?/p>
]]>