peony 0.0.2 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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