fezzik 0.1.0

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.
Files changed (7) hide show
  1. data/README +36 -0
  2. data/TODO +1 -0
  3. data/bin/fez +12 -0
  4. data/bin/fezify +120 -0
  5. data/fezzik.gemspec +25 -0
  6. data/lib/fezzik.rb +30 -0
  7. metadata +73 -0
data/README ADDED
@@ -0,0 +1,36 @@
1
+ # Fezzik
2
+
3
+ Fezzik (or fez) is a slim and snappy alternative to Capistrano.
4
+
5
+ It sets up a rake-based rsync workflow with a single configuration file
6
+ and gets out of your way.
7
+
8
+ ## Install
9
+
10
+ sudo gem install fezzik
11
+
12
+ ## Setup
13
+ $ cd myproject
14
+ $ ls
15
+ server.rb
16
+ $ fezify
17
+ [new] bin/run_app.sh created
18
+ [new] config/recipes/core.rb created
19
+ [new] config/deploy.rb created
20
+ [done]
21
+
22
+ **config/deploy.rb**: set your app name and destination servers
23
+ set :app, "fezzik"
24
+ ...
25
+ destination :prod do
26
+ set :domain, "www.fezzik.com"
27
+ end
28
+
29
+ **bin/run_app.sh**: write a command that will start your app
30
+ #!/bin/sh
31
+ nohup ruby server.rb &
32
+
33
+ Ready to deploy!
34
+ $ fez to_prod deploy
35
+ ...
36
+ fezzik deployed!
data/TODO ADDED
@@ -0,0 +1 @@
1
+ * sensitive options
data/bin/fez ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "rake"
5
+ require "rake/remote_task"
6
+ require "fezzik"
7
+
8
+ # Include everything in config/recipes
9
+ Dir[File.join(Dir.pwd, 'config/recipes/**/*.rb')].sort.each { |lib| require lib }
10
+
11
+ Rake.application["fezzik:run"].invoke
12
+
data/bin/fezify ADDED
@@ -0,0 +1,120 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ files = {
4
+ "config/deploy.rb" => <<-EOF,
5
+ # This is the configuration file for fezzik.
6
+ # Define variables here as you would for Vlad the Deployer.
7
+ # A full list of variables can be found here:
8
+ # http://hitsquad.rubyforge.org/vlad/doco/variables_txt.html
9
+
10
+ set :app, "app"
11
+ set :deploy_to, "/opt/#\{app\}"
12
+ set :release_path, "#\{deploy_to\}/releases/#\{Time.now.strftime("%Y%m%d%H%M")\}"
13
+ set :local_path, Dir.pwd
14
+ set :user, "root"
15
+
16
+
17
+ # Each destination is a set of machines and configurations to deploy to.
18
+ # You can deploy to a destination from the command line with:
19
+ # fez to_dev deploy
20
+ #
21
+ # :domain can be an array if you are deploying to multiple hosts.
22
+ #
23
+ # You can set environment variables that will be loaded at runtime on the server
24
+ # like this:
25
+ # env :rack_env, "production"
26
+
27
+ destination :dev do
28
+ set :domain, "#\{user\}@dev.example.com"
29
+ end
30
+
31
+ destination :prod do
32
+ set :domain, "#\{user\}@prod.example.com"
33
+ end
34
+ EOF
35
+
36
+ "config/recipes/core.rb" => <<-EOF,
37
+ # This file contains core tasks that are used to deploy your application to the
38
+ # destination servers. This is a decent initial setup, but is completely configurable.
39
+
40
+ namespace :fezzik do
41
+ task :save_environment do
42
+ system("mkdir -p /tmp/#\{app\}/config")
43
+ File.open("/tmp/#\{app\}/config/environment.rb", "w") do |file|
44
+ @environment.each do |key, value|
45
+ file.puts "#\{key.to_s.upcase\}=\\"#\{value\}\\""
46
+ end
47
+ end
48
+ File.open("/tmp/#\{app\}/config/environment.sh", "w") do |file|
49
+ @environment.each do |key, value|
50
+ file.puts "export #\{key.to_s.upcase\}=\\"#\{value\}\\""
51
+ end
52
+ end
53
+ end
54
+
55
+ task :stage do
56
+ puts "staging project in /tmp/#\{app\}"
57
+ system("rm -fr /tmp/#\{app\}")
58
+ system("cp -r #\{local_path\} /tmp/#\{app\}")
59
+ Rake::Task["fezzik:save_environment"].invoke
60
+ end
61
+
62
+ remote_task :setup do
63
+ puts "setting up servers"
64
+ run "mkdir -p #\{deploy_to\}/releases"
65
+ end
66
+
67
+ remote_task :push => [:stage, :setup] do
68
+ rsync "/tmp/#\{app\}/", "#\{target_host\}:#\{release_path\}"
69
+ end
70
+
71
+ remote_task :symlink => :push do
72
+ puts "symlinking current to #\{release_path\}"
73
+ run "cd #\{deploy_to\} && ln -fns #\{release_path\} current"
74
+ end
75
+
76
+ remote_task :start do
77
+ puts "starting from #\{release_path\}"
78
+ run "cd #\{current_path\} && source config/environment.sh" +
79
+ " && ./bin/run_app.sh"
80
+ end
81
+
82
+ remote_task :stop do
83
+ puts "stopping app"
84
+ # Replace YOUR_APP_NAME with whatever is run from your bin/run_app.sh file.
85
+ # run "(kill -9 `ps aux | grep 'YOUR_APP_NAME' | grep -v grep | awk '\{print $2\}'` || true)"
86
+ end
87
+
88
+ remote_task :restart do
89
+ Rake::Task["fezzik:stop"].invoke
90
+ Rake::Task["fezzik:start"].invoke
91
+ end
92
+
93
+ task :deploy => [:symlink, :restart] do
94
+ puts "#\{app\} deployed!"
95
+ end
96
+ end
97
+ EOF
98
+
99
+ "bin/run_app.sh" => <<-EOF
100
+ #!/bin/sh
101
+ # This file will be called to start your application.
102
+ EOF
103
+ }
104
+
105
+ system("mkdir -p config/recipes")
106
+ system("mkdir -p bin")
107
+
108
+ files.each do |filename, content|
109
+ if File.exists?(filename) && ARGV[0] != "-f"
110
+ puts " [skip] #{filename} already exists"
111
+ else
112
+ puts " [new] #{filename} created"
113
+ File.open(filename, "w") { |file| file.write(content) }
114
+ if filename == "bin/run_app.sh"
115
+ system("chmod a+x bin/run_app.sh")
116
+ end
117
+ end
118
+ end
119
+
120
+ puts " [done]"
data/fezzik.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "fezzik"
3
+ s.version = "0.1.0"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">=0") if s.respond_to? :required_rubygems_version=
6
+ s.specification_version = 2 if s.respond_to? :specification_version=
7
+
8
+ s.author = "Daniel MacDougall"
9
+ s.email = "dmacdougall@gmail.com"
10
+
11
+ s.description = "A light deployment system that gets out of your way"
12
+ s.summary = "A light deployment system that gets out of your way"
13
+ s.homepage = "http://github.com/dmacdougall/fezzik"
14
+ s.rubyforge_project = "fezzik"
15
+
16
+ s.executables = %w(fez fezify)
17
+ s.files = %w(
18
+ README
19
+ TODO
20
+ fezzik.gemspec
21
+ lib/fezzik.rb
22
+ bin/fez
23
+ bin/fezify
24
+ )
25
+ end
data/lib/fezzik.rb ADDED
@@ -0,0 +1,30 @@
1
+ namespace :fezzik do
2
+ task :run do
3
+ if ARGV.size == 0
4
+ puts " Usage: fez to_destination task"
5
+ exit 1
6
+ end
7
+ destination = ARGV[0]
8
+ destination = $1 if destination.match(/to_(.+)/)
9
+ tasks = ARGV[1..-1]
10
+ Rake::Task["fezzik:load_config"].invoke destination
11
+ tasks.each do |task|
12
+ Rake::Task["fezzik:#{task}"].invoke
13
+ end
14
+ end
15
+
16
+ task :load_config, :destination do |t, args|
17
+ @destination = args[:destination].to_sym
18
+ @environment = {}
19
+ require "config/deploy.rb"
20
+ puts "configuring for #{domain}"
21
+ end
22
+
23
+ def destination(target, &block)
24
+ block.call if target == @destination
25
+ end
26
+
27
+ def env(key, value)
28
+ @environment[key] = value
29
+ end
30
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fezzik
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Daniel MacDougall
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-01 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: A light deployment system that gets out of your way
23
+ email: dmacdougall@gmail.com
24
+ executables:
25
+ - fez
26
+ - fezify
27
+ extensions: []
28
+
29
+ extra_rdoc_files: []
30
+
31
+ files:
32
+ - README
33
+ - TODO
34
+ - fezzik.gemspec
35
+ - lib/fezzik.rb
36
+ - bin/fez
37
+ - bin/fezify
38
+ has_rdoc: true
39
+ homepage: http://github.com/dmacdougall/fezzik
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options: []
44
+
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ hash: 3
53
+ segments:
54
+ - 0
55
+ version: "0"
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 3
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ requirements: []
66
+
67
+ rubyforge_project: fezzik
68
+ rubygems_version: 1.6.0
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: A light deployment system that gets out of your way
72
+ test_files: []
73
+