创建数据库任务
6 p3 d0 F! f+ N& v6 V3 Y
5 u( N" s! e0 X) p* Y2 B 更换到数据库版本库。
3 }4 X" T2 q- v$ P% S
2 M) n& Z9 x& v wks01 Service# cd /database2 D" ^& x5 ^- }: C6 R- K8 U
; L% j s+ @6 _) [! X! o. @ wks01 database# touch Rexfile
* H9 O3 |7 C- l
+ j L7 J# l( m0 U# S0 s! y; a" B: H" C 现在,我们将把2个常见版本库作为一个外部版本库来添加。
( F$ P- G2 x5 K. l
" |5 _( h% K. e, h0 j6 Q- ` wks01 database# svn propedit svn:externals .
& ^2 F/ |+ u P7 C) R4 l8 p / q9 Y% c1 A" K! I+ t+ {
添加下列几行到编辑器中,保存并关闭。# d) D/ b# e, M1 `& o
: G7 d- _1 i% R! A
lib/Common http://svn01/svn/common
& b2 L6 |9 t3 X( d 5 `6 J& ^: w% ~4 h" i& A* W4 c
lib/Service http://svn01/svn/service# A( l' P$ k/ p7 n% |# x
/ {0 G6 K$ s6 t3 U8 m7 C& _! B" }
在建好外部版本库之后,运行更新,提交新的设置。$ Y, [. g0 P, v3 Z8 S6 A
* ~/ S+ E: Q; j% Q* C# S. [& S7 q* d3 p wks01 database# svn up3 [4 v f6 m0 d3 T9 Y7 H
" Z @& \; ]3 S f/ |3 D; b
wks01 database# svn ci -m "added external repositories"
/ f8 j) k# I* R& H- L8 p
) X' t5 i. U2 m svn up命令现在检查两个外部版本库,检查有无更新。所以,要是有人往这其中一个版本库添加了新服务,你在执行svn up命令后获得新服务。现在,你可以开始创建Rexfile,以建立数据库服务器。
: E- D1 @5 x1 x, k4 D5 c
: C2 _/ O+ G' L5 @ @ \" w2 H( d set user => "root";5 N1 ?. }. G n& Y
& R. S; |* o- J; u7 t
set password => "f00b4r";
( r. k; j" g/ j+ k, H
5 o! C- W; m2 e3 {0 | include qw/
9 U, O* `# J7 ~3 e$ s4 ?& i+ l; ~ & \4 r6 R( x; h. T; T+ b0 O. N) d
Common::NTP# \4 Z3 `1 y( t" Z: z: _% Y
0 {4 k }1 o/ Z# c! j3 P4 C0 ?3 X6 c Service::MySQL
- ~9 ^% {8 p9 U& d# R
6 F/ r; |# d e% ]2 n" P8 s /;- v5 b! Q+ U3 G
( \' u- I- _$ ^- `" @/ u
set group => srvdb => "db01";* {' \1 h% q( ~1 k! i! i8 U
, ?# \6 G) ^& @3 N/ ~ task "prepare", group => "srvdb", sub {/ E6 a; S) C. q' l* {% m7 W
6 n; w' P0 Y' i1 L # 运行常见ntp任务"prepare"
& L7 T3 ?8 k$ y& c9 O) |5 f 0 m% S& d" y( _# v. M) B9 ?
Common::NTP::prepare();
! `0 f' H. h0 W; C: N: W6 E
* r* v G. n. R, T2 j- S # 安装mysql
$ d) N8 Q+ U9 ]& n ) X/ P, l, d, [
Service::MySQL::prepare();, f& M/ o& V5 Y% b0 X1 |
& ]1 B9 h T8 S9 C2 }* c+ A
# 配置mysql
4 W" t5 H5 V4 Y4 M8 B. u
0 f% ]7 P( [- W- R Service::MySQL::configure({
/ v5 A. y. _2 P
$ v; a5 A, D8 g8 R key_buffer => "32M",) B4 C$ m" u, o: j8 ]
- _( L+ m) L: {' K* | max_allowed_packet => "32M",+ K1 S7 y% f2 m9 L8 p' {0 Q% ~
+ k m0 Y) J+ U2 l7 x% W, p
}); M) a: b( R- u/ y0 |
( X8 o: p" W `0 F
# 重新启动mysql
^3 ^* U& S7 Q0 Q8 j: A( Z
O/ u' |: f! \' z service mysql => "restart";+ V! e0 P0 L* n0 |' l( l. u5 k+ ?
; z! a8 B$ }3 B6 v2 O
};
8 S8 [2 |( r: a : D' z1 }! C0 d
首先(在第1行和第2行),我们设立了针对目标主机(db01)所用的验证机制。这里,你还可以使用密钥验证(欲知详情,请参阅http://rexify.org/howtos/start.html)。然后,我们添加了Common::NTP和Service::MySQL模块,那样我们可以从这些模块来使用服务。每个任务还登记为一个perl函数。所以,我们完全可以像调用其余任何perl函数那样来调用它们。我们添加了所需的模块后,定义了一个新的服务器组,名为"srvdb",并为其添加了主机"db01".可以为一个服务器组添加多个主机。比如:2 O. X8 i7 }$ p/ S) l/ r
# h, ~+ ]& Q1 N set group => srvdb => "db01", "db02", "db03";# G- l0 S- O& K! G: t7 |
- W! H6 L* v3 [7 P7 Y
set group => srvdb => "db[0103]";4 ~; b- I6 I: X5 W! [6 g3 l9 @
& ~* Q4 d- x+ ]* }
在第2行中,我们定义了第一个任务,名为"prepare".该任务在服务器组"srvdb"中的所有服务器上执行。该任务调用Common::NTP和Service::MySQL模块的"prepare"任务。创建工作完毕后,我们在第20行配置了mysql服务器,在第26行重新启动了mysql服务。就这样。这将安装、配置和启动MySQL服务器。现在,你可以把一切重新提交到版本库。* C+ R \9 T: b l5 E6 F
4 H5 |' ]1 }6 }$ }$ i3 ]" | I
wks01 database# svn add Rexfile
/ l/ g7 h$ u0 @( U
, [" B5 T- N" I( I wks01 database# svn ci -m "inital commit of Rexfile"
5 K! T, I7 k& l3 A9 u
9 P) N1 t) ^: T$ ? 为了创建数据库服务器,你可以输入下列命令:
8 l' m ^1 `0 C6 ~5 f$ ]$ }: W8 M1 z , Q4 y- g+ C$ S7 F, F. D6 s4 a
wks01 database# rex prepare
+ [# o3 l* _7 x- A
2 y( T: V; e; Q" M) a1 a, U' {. {4 l 如果你想列出Rexfile里面的任务,可以使用下列命令。
0 M5 ?; w* K$ E- f . l. C9 T+ ]4 k8 x) d/ B
wks01 database# rex -T
; n$ a; u C6 G# \$ [: T3 h & b: z# M# c# n% ~% Q. r% }
我们的数据库运行后,现在可以为website项目创建任务。 |