peony 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 71a9982e5f32013ab5ba4fc8034e6c72d978f86e
4
- data.tar.gz: 5ffb0d9c65cf80846f4f1e0c27173805bd64248c
3
+ metadata.gz: f262ec4efc34944d8ffb10213889b4edd99bc900
4
+ data.tar.gz: 709a46b4578ffecc5283a7fe320181fb3a321969
5
5
  SHA512:
6
- metadata.gz: 8feaff6c88dacee399549f76d2bbe375b1a66311dbf6a3ae10afde6404cf6608d13063123349acef1ef3555ebbdc172656e263c9398104535cfeabf9670bd3c0
7
- data.tar.gz: 553595c2ad5f0c8923839632a30410061169ba5f2c5a16e299257d6c8f327989d277cfe6c8d1f3fc664b65c3e800771a27d81338a9434523d58a2fd1de94a906
6
+ metadata.gz: b3e8a5eb0ff257735b9080c57edc225e5519b49592453de6639e0c76ec835d8c57ff4a06bc60a2ad3504af06e33753680609b51ff86d2e42e943c2a579a7db68
7
+ data.tar.gz: 0b263394882b1f72022fa79dac4740591318df2490926a912ec6988ce5a78f744d03163b3c2c1d5f16e9406c59dda58393714706a29358da3cc1a4f4737b73b7
data/README.md CHANGED
@@ -17,8 +17,38 @@ Or install it yourself as:
17
17
  $ gem install peony
18
18
 
19
19
  ## Usage
20
+ Peony inherits from Rake, and added many useful methods for you to write rake scripts.
21
+
22
+ If you want to run nginx server on your local server, you can add the following to your Rakefile
23
+
24
+ set :base_dir, "/opt"
25
+ set_default :www_http_port, 80
26
+ set :www_paths, {
27
+ "/homebrew" => "/Library/Caches/Homebrew"
28
+ }
29
+ set :nginx, "/usr/local/bin/nginx"
30
+
31
+ Execute the following commands
32
+
33
+ peony nginx:init
34
+ peony nginx:www:init
35
+ peony nginx:www:start
36
+
37
+ Then you can check the http://localhost/homebrew
38
+
39
+
40
+ Maybe you just want to use rake, all you just want to use some recipes of peony,
41
+ you can just add the following code to your Rakefile
42
+
43
+ require 'peony'
44
+ require 'peony/rake'
45
+
46
+ spec = Gem::Specification.find_by_name("peony")
47
+ modules = ["#{spec.gem_dir}/recipes/nginx.rake", "#{spec.gem_dir}/recipes/nginx/www.rake"]
48
+ modules.each do|f|
49
+ load f
50
+ end
20
51
 
21
- TODO: Write usage instructions here
22
52
 
23
53
  ## Contributing
24
54
 
data/lib/peony/default.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  set_default :base_dir, "/u"
2
2
  set_default :var_dir, ->{"#{base_dir}/var"}
3
3
  set_default :etc_dir, ->{"#{base_dir}/etc"}
4
+ set_default :share_dir, ->{"#{base_dir}/share"}
4
5
  set_default :run_dir, ->{"#{var_dir}/run"}
5
6
  set_default :log_dir, ->{"#{var_dir}/log"}
6
7
  set_default :www_dir, ->{"#{var_dir}/www"}
@@ -10,6 +11,7 @@ set_default :user, "James"
10
11
  set_default :group, "admin"
11
12
 
12
13
  namespace :settings do
14
+ desc "List all the settings."
13
15
  task :list do
14
16
  settings.each do|k, v|
15
17
  puts "#{k} = #{settings.send(k)}"
@@ -12,9 +12,11 @@ module Peony
12
12
  raise Error, "Setting :#{key} is not set" unless include?(key)
13
13
  evaluate self[key]
14
14
  else
15
- ret = evaluate self[method]
16
- ret = block.call unless block.nil?
17
- ret
15
+ if include? method
16
+ evaluate self[method]
17
+ else
18
+ block.call unless block.nil?
19
+ end
18
20
  end
19
21
  end
20
22
 
data/lib/peony/utils.rb CHANGED
@@ -1,11 +1,26 @@
1
- require 'peony/template_binding'
2
-
3
1
  module Peony
4
2
  module Utils
5
3
 
6
- def sudo(cmd)
7
- sh "sudo #{cmd}" do |res, stat|
8
- yield res, stat
4
+ def sudo(cmd, &block)
5
+ run "sudo #{cmd}", &block
6
+ end
7
+
8
+ def run(cmd)
9
+ sh cmd do|res, stat|
10
+ if block_given?
11
+ yield res, stat
12
+ else
13
+ puts stat.inspect unless res
14
+ end
15
+ end
16
+ end
17
+
18
+ def mkdir_p(*dirs)
19
+ dirs.each do|dir|
20
+ if !FileTest.exists?(dir)
21
+ FileUtils.mkdir_p(dir)
22
+ end
23
+ fail "#{dir} must be a directory!" unless FileTest.directory?(dir)
9
24
  end
10
25
  end
11
26
 
@@ -161,13 +176,12 @@ module Peony
161
176
  #
162
177
  # Returns things.
163
178
  def method_missing(meth, *args, &blk)
164
- settings.send meth, *args
179
+ if settings.include? meth
180
+ settings.send meth, *args, &blk
181
+ else
182
+ super
183
+ end
165
184
  end
166
185
 
167
- private
168
- def template_binding
169
- @template_binding ||= TemplateBinding.new(settings)
170
- @template_binding.context_binding
171
- end
172
186
  end
173
187
  end
data/lib/peony/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Peony
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,59 @@
1
+ set_default :mongod, "/usr/local/bin/mongod"
2
+
3
+ set_default :mongo_master_name, "master"
4
+ set_default :mongo_slave_name, "slave"
5
+
6
+ set_default :mongo_master_dir, ->{"#{data_dir}/mongo/#{mongo_master_name}"}
7
+ set_default :mongo_slave_dir, ->{"#{data_dir}/mongo/#{mongo_slave_name}"}
8
+ set_default :mongo_etc_dir, ->{"#{etc_dir}/mongo"}
9
+ set_default :mongo_log_dir, ->{"#{log_dir}/mongo"}
10
+ set_default :mongo_run_dir, ->{"#{run_dir}/mongo"}
11
+
12
+
13
+ set_default :mongo_fork , true
14
+ set_default :mongo_jsonp, true
15
+ set_default :mongo_rest , true
16
+
17
+ set_default :mongo_master_port, 27017
18
+ set_default :mongo_slave_port, 27018
19
+ set_default :mongo_slave_source, ->{"127.0.0.1:#{mongo_master_port}"}
20
+
21
+ set_default :mongo_master_conf, ->{"#{mongo_etc_dir}/#{mongo_master_name}.conf"}
22
+ set_default :mongo_slave_conf, ->{"#{mongo_etc_dir}/#{mongo_slave_name}.conf"}
23
+
24
+ set_default :mongo_master_start, ->{"#{mongod} --config #{mongo_master_conf}"}
25
+ set_default :mongo_slave_start, ->{"#{mongod} --config #{mongo_slave_conf}"}
26
+ set_default :mongo_master_stop, ->{"kill -2 `cat #{mongo_run_dir}/#{mongo_master_name}.pid`"}
27
+ set_default :mongo_slave_stop, ->{"kill -2 `cat #{mongo_run_dir}/#{mongo_slave_name}.pid`"}
28
+
29
+
30
+ namespace :db do
31
+ namespace :mongo do
32
+
33
+ desc "Create the directory for mongodb, and copy mongo config file to etc directory."
34
+ task :init do
35
+ mkdir_p(mongo_master_dir, mongo_slave_dir, mongo_etc_dir, mongo_log_dir, mongo_run_dir)
36
+ template("mongo/master.conf.erb", mongo_master_conf, true)
37
+ template("mongo/slave.conf.erb", mongo_slave_conf, true)
38
+ end
39
+
40
+ [:master, :slave].each do|ns|
41
+ namespace ns do
42
+ [:start, :stop].each do|t|
43
+ desc "#{t} mongodb #{ns}"
44
+ task t do
45
+ run self.send("mongo_#{ns}_#{t}")
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ desc "Start the master mongodb instance"
52
+ task :start => "master:start" do
53
+ end
54
+
55
+ desc "Stop the master mongodb instance"
56
+ task :stop => "master:stop" do
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,55 @@
1
+ set_default :mysql_home, `brew --prefix mysql`.strip
2
+ set_default :mysqld, "/usr/local/bin/mysqld_safe"
3
+ set_default :mysqladmin, "/usr/local/bin/mysqladmin"
4
+ set_default :mysql_install_db, "/usr/local/bin/mysql_install_db"
5
+
6
+ set_default :mysql_dir, ->{"#{data_dir}/mysql/#{mysql_port}"}
7
+ set_default :mysql_log_dir, ->{"#{log_dir}/mysql/#{mysql_port}"}
8
+ set_default :mysql_conf, ->{"#{etc_dir}/my.cnf"}
9
+
10
+ set_default :mysql_user, "root"
11
+ set_default :mysql_password, "123456"
12
+
13
+ set_default :mysql_pid_file, ->{"#{run_dir}/mysql/#{mysql_port}.pid"}
14
+ set_default :mysql_port, '3306'
15
+ set_default :mysql_socket, "/tmp/mysql.sock"
16
+ set_default :mysql_charset, 'UTF8'
17
+ set_default :mysql_general_log, 'ON'
18
+ set_default :mysql_slow_query_log, 'ON'
19
+
20
+ set_default :mysql_start, ->{"#{mysqld} --defaults-file=#{mysql_conf} --datadir=#{mysql_dir} --basedir=#{mysql_home} &"}
21
+ set_default :mysql_stop, ->{"#{mysqladmin} --verbose --user=#{mysql_user} --password=#{mysql_password} shutdown"}
22
+ set_default :mysql_status, ->{"#{mysqladmin} --verbose status variables"}
23
+
24
+ namespace :db do
25
+
26
+ namespace :mysql do
27
+
28
+ desc "Create mysql directorys, config file and run mysql_install_db"
29
+ task :init do
30
+ mkdir_p(mysql_dir, mysql_log_dir, "#{run_dir}/mysql/")
31
+ template("mysql/my.cnf.erb", mysql_conf, true)
32
+ run "#{mysql_install_db} --defaults-file=#{mysql_conf} --datadir=#{mysql_dir} --basedir=#{mysql_home}" if Dir["#{mysql_dir}/*"].empty?
33
+ end
34
+
35
+ [:start, :stop, :status].each do|t|
36
+ desc "#{t} mysql instance."
37
+ task t do
38
+ run self.send("mysql_#{t}")
39
+ end
40
+ end
41
+
42
+ desc "Set mysql root user password."
43
+ task :set_root_pass do
44
+ run "mysqladmin --no-defaults --port=#{mysql_port} --user=root --protocol=tcp password '#{mysql_password}'"
45
+ end
46
+
47
+ namespace :web do
48
+ [:start, :stop].each do|t|
49
+ desc "#{t} phpMyAdmin, please put the phpMyAdmin to #{www_dir}"
50
+ task t => ["nginx:www:#{t}", "php:fcgi:#{t}"]
51
+ end
52
+ end
53
+ end
54
+
55
+ end
data/recipes/db/pg.rake CHANGED
@@ -15,32 +15,30 @@ set_default :pg_super_users, {
15
15
 
16
16
  namespace :db do
17
17
  namespace :pg do
18
+
19
+ desc "Execute postgres initdb."
18
20
  task :init do
19
21
  if File.exists?("#{pg_data_dir}/postgresql.conf")
20
22
  puts "Postgresql database has already initialized."
21
23
  else
22
- sh pg_init do |res, stat|
23
- puts stat.inspect if !res
24
- end
24
+ run pg_init
25
25
  end
26
26
  end
27
27
 
28
+ desc "Set super users for postgresql."
28
29
  task :set_super_users do
29
30
  pg_super_users.each do|user, password|
30
31
  sqls = ["CREATE USER #{user} WITH PASSWORD '#{password}';", "ALTER USER #{user} WITH SUPERUSER;"]
31
32
  sqls.each do|sql|
32
- sh "psql -d postgres -c \"#{sql}\"" do|res, stat|
33
- puts stat.inspect if !res
34
- end
33
+ run "psql -d postgres -c \"#{sql}\""
35
34
  end
36
35
  end
37
36
  end
38
37
 
39
38
  [:start, :stop, :restart, :reload].each do|cmd|
39
+ desc "#{cmd} postgresql instance."
40
40
  task cmd do
41
- sh self.send("pg_#{cmd}") do|res, stat|
42
- puts stat.inspect if !res
43
- end
41
+ run self.send("pg_#{cmd}")
44
42
  end
45
43
  end
46
44
  end
@@ -0,0 +1,36 @@
1
+ set_default :redis_conf, ->{"#{etc_dir}/redis.conf"}
2
+ set_default :redis_dir, ->{"#{data_dir}/redis"}
3
+ set_default :redis_pid, ->{"#{run_dir}/redis.pid"}
4
+ set_default :redis_port, 6379
5
+
6
+ set_default :redis_start, ->{"redis-server #{redis_conf}"}
7
+ set_default :redis_stop, ->{"redis-cli -p #{redis_port} shutdown"}
8
+ set_default :redis_restart, ->{"kill -2 `#{redis_pid}` && #{redis_start}"}
9
+
10
+ set_default :redis_daemonize, "yes"
11
+ set_default :redis_timeout, 0
12
+ set_default :redis_loglevel, "notice"
13
+ set_default :redis_logfile, "stdout"
14
+ set_default :redis_databases, 16
15
+ set_default :rdbcompression, "yes"
16
+ set_default :rdbchecksum, "yes"
17
+ set_default :redis_dbfilename, "dump.rdb"
18
+ set_default :redis_appendonly, "yes"
19
+ set_default :redis_activerehashing, "yes"
20
+
21
+ namespace :db do
22
+ namespace :redis do
23
+ desc "Initialize redis directory and copy redis.conf to etc directory."
24
+ task :init do
25
+ mkdir_p(redis_dir)
26
+ template("redis.conf.erb", redis_conf)
27
+ end
28
+
29
+ [:start, :stop, :restart].each do|cmd|
30
+ desc "#{cmd} redis"
31
+ task cmd do
32
+ run self.send("redis_#{cmd}")
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ set_default :es_plugins_dir, "/usr/local/var/lib/elasticsearch/plugins"
2
+ set_default :es_cluster_name, "default_cluster"
3
+ set_default :es_data_dir, ->{"#{data_dir}/elasticsearch/"}
4
+ set_default :es_network_host, "127.0.0.1"
5
+ set_default :es_config, ->{"#{etc_dir}/elasticsearch/config.yml"}
6
+
7
+ #-f can let elasticsearch running in the foreground
8
+ set_default :elasticsearch_start, ->{"elasticsearch -D es.config=#{es_config} -p #{run_dir}/elasticsearch.pid"}
9
+ #set_default :elasticsearch_stop, ->{"elasticsearch -D es.config=#{es_config} -p #{run_dir}/elasticsearch.pid stop"}
10
+ set_default :elasticsearch_stop, ->{"kill `cat #{run_dir}/elasticsearch.pid`"}
11
+ set_default :elasticsearch_shutdown, ->{"curl -XPOST 'http://#{es_network_host}:9200/_shutdown'"}
12
+
13
+ namespace :elasticsearch do
14
+
15
+ desc "Initialize elasticsearch directory and copy it's config files to etc path."
16
+ task :init do
17
+ mkdir_p("#{etc_dir}/elasticsearch")
18
+ template("elasticsearch/config.yml.erb", es_config)
19
+ template("elasticsearch/logging.yml.erb", "#{etc_dir}/elasticsearch/logging.yml")
20
+ end
21
+
22
+ [:start, :stop, :shutdown].each do|cmd|
23
+ desc "#{cmd} elasticsearch."
24
+ task cmd do
25
+ run self.send("elasticsearch_#{cmd}")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,42 @@
1
+ set_default :httpd, "/usr/sbin/httpd"
2
+ set_default :httpd_server_root, "/usr"
3
+ set_default :httpd_share_dir, "/usr/share/httpd"
4
+
5
+ set_default :httpd_etc_dir, ->{"#{etc_dir}/httpd"}
6
+ set_default :httpd_conf, ->{"#{httpd_etc_dir}/httpd.conf"}
7
+
8
+ set_default :httpd_log_dir, ->{"#{log_dir}/httpd"}
9
+ set_default :webdav_dir, ->{"#{var_dir}/webdav"}
10
+ set_default :auth_user_file, ->{"#{httpd_etc_dir}/user.passwd"}
11
+ set_default :httpd_server_admin, "zhiqiangzhan@gmail.com"
12
+ set_default :httpd_port, 8888
13
+ set_default :httpd_server_name, ->{"localhost:#{httpd_port}"}
14
+
15
+ set_default :auth_user, "admin"
16
+
17
+ namespace :httpd do
18
+ desc "Initialize httpd config files."
19
+ task :init do
20
+ search_paths.each do|sp|
21
+ mkdir_p(httpd_etc_dir, "#{httpd_etc_dir}/extra", httpd_log_dir, webdav_dir)
22
+ Dir["#{sp}/httpd/**/*.erb"].each do|fn|
23
+ target = fn.sub("#{sp}/httpd", "#{httpd_etc_dir}").sub(/.erb$/, "")
24
+ template(fn, target) unless File.exists?(target)
25
+ end
26
+ end
27
+ end
28
+
29
+ desc "Create AuthUserFile."
30
+ task :auth_user_file do
31
+ run "htpasswd -c #{auth_user_file} #{auth_user}"
32
+ end
33
+
34
+ namespace :webdav do
35
+ [:start, :restart, :stop].each do|t|
36
+ desc "#{t} httpd instance."
37
+ task t do
38
+ run "#{httpd} -f #{httpd_conf} -k #{t}"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -4,19 +4,21 @@ set_default :www_paths, {}
4
4
 
5
5
  namespace :nginx do
6
6
  namespace :www do
7
+ desc "Create www config files."
7
8
  task :init do
8
9
  template("nginx/www.conf.erb", "#{nginx_etc_dir}/www.conf", true)
9
10
  template("nginx/sites-enabled/static.conf.erb", "#{nginx_etc_dir}/sites-enabled/static.http.conf", true) unless www_paths.empty?
11
+ template("nginx/sites-enabled/php.conf.erb", "#{nginx_etc_dir}/sites-enabled/php.http.conf", true)
10
12
  end
11
13
 
12
14
  [:start, :stop, :reload].each do|t|
15
+ desc "#{t} nginx www instance."
13
16
  task t do
14
- sudo self.send("nginx_#{t}_cmd", :www) do|res, stat|
15
- puts stat.inspect if !res
16
- end
17
+ sudo self.send("nginx_#{t}_cmd", :www)
17
18
  end
18
19
  end
19
20
 
21
+ desc "Restart nginx www instance."
20
22
  task :restart do
21
23
  nginx_restart(:www)
22
24
  end
data/recipes/nginx.rake CHANGED
@@ -7,12 +7,12 @@ set_default :nginx_prefix, ->{"#{log_dir}/nginx"}
7
7
  set_default :worker_processes, 8
8
8
 
9
9
  set_default :upstreams, [
10
- {name: :fastcgi, servers: ["127.0.0.1:6666"]},
10
+ {name: :fastcgi_server, servers: ["127.0.0.1:6666"]},
11
11
  ]
12
12
 
13
13
  set_default :server_name, "localhost"
14
14
 
15
- set_default :use_ssl, true
15
+ set_default :use_ssl, false
16
16
  set_default :ssl_certificate, ->{"#{etc_dir}/ssl/server.crt"}
17
17
  set_default :ssl_certificate_key, ->{"#{etc_dir}/ssl/server.key"}
18
18
 
@@ -37,11 +37,9 @@ def nginx_restart(name)
37
37
  end
38
38
 
39
39
  namespace :nginx do
40
+ desc "Initialize nginx directory and create it's config files."
40
41
  task :init do
41
- [nginx_etc_dir, nginx_run_dir, nginx_prefix].each do|dir|
42
- FileUtils.mkdir_p(dir) unless File.exists?(dir)
43
- fail "#{dir} must be a directory!" unless File.directory?(dir)
44
- end
42
+ mkdir_p(nginx_etc_dir, nginx_run_dir, nginx_prefix)
45
43
  unless File.exists?("#{nginx_etc_dir}/conf")
46
44
  FileUtils.cp_r(find_templates("nginx/conf", false).first, nginx_etc_dir)
47
45
  end
data/recipes/php.rake ADDED
@@ -0,0 +1,30 @@
1
+ set_default :php_home, ->{"#{share_dir}/php5"}
2
+ set_default :php_cgi, ->{"#{php_home}/bin/php-cgi"}
3
+ set_default :spawn_fcgi, "/usr/local/bin/spawn-fcgi"
4
+ set_default :fcgi_run_dir, ->{"#{run_dir}/fcgi"}
5
+
6
+ namespace :php do
7
+ namespace :fcgi do
8
+ desc "Create fcgi running directory."
9
+ task :init do
10
+ mkdir_p("#{run_dir}/fcgi")
11
+ end
12
+
13
+ desc "Start fcgi."
14
+ task :start => :init do
15
+ run "#{spawn_fcgi} -a 127.0.0.1 -p 6666 -C 6 -f #{php_cgi} -u #{user} -P #{fcgi_run_dir}/spawn_fcgi.pid > /dev/null"
16
+ end
17
+
18
+ desc "Kill fcgi."
19
+ task :stop do
20
+ run 'killall -9 php-fcgi > /dev/null 2>&1 || echo -n "not running"'
21
+ end
22
+
23
+ desc "Restart fcgi."
24
+ task :restart => :stop do
25
+ invoke "php:fcgi:stop"
26
+ sleep(6)
27
+ invoke "php:fcgi:start"
28
+ end
29
+ end
30
+ end
@@ -28,7 +28,7 @@ describe Peony::Settings do
28
28
  @settings.email.should == 'zhiqiangzhan@gmail.com'
29
29
  end
30
30
 
31
- it 'setting default value should value' do
31
+ it 'setting set default value should be work' do
32
32
  @settings.send(:x=, 1){ 3 }
33
33
  @settings.x.should == 1
34
34
  @settings.send(:y=, nil){ 3 }
@@ -37,8 +37,10 @@ describe Peony::Settings do
37
37
  @settings.z.should == 6
38
38
  end
39
39
 
40
- it 'setting get default value should value' do
41
- @settings.x{1}.should == 1
40
+
41
+ it 'setting get default value should be work' do
42
+ @settings.x = -1
43
+ @settings.x{1}.should == -1
42
44
  @settings.y{3}.should == 3
43
45
  @settings.z{6}.should == 6
44
46
  end