ey_deployment 0.0.2

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 (2) hide show
  1. data/lib/ey/deployment.rb +132 -0
  2. metadata +67 -0
@@ -0,0 +1,132 @@
1
+ require "pathname"
2
+ require "rack/hoptoad"
3
+
4
+ module EY
5
+ class Deployment
6
+ class Error < StandardError; end
7
+
8
+ def self.setup(env)
9
+ @instance = new(env)
10
+ @instance.setup
11
+ end
12
+
13
+ def self.app
14
+ @app ||= instance.build_app
15
+ end
16
+
17
+ def self.env
18
+ instance.env
19
+ end
20
+
21
+ def self.db_migrate
22
+ instance.db_migrate
23
+ end
24
+
25
+ def self.instance
26
+ @instance || raise(Error, "call setup(rack_env) first")
27
+ end
28
+
29
+ def initialize(env)
30
+ @env = env
31
+ end
32
+
33
+ attr_reader :env
34
+
35
+ def setup
36
+ unless valid_envs.include?(@env)
37
+ raise Error, "invalid env: #{@env.inspect}"
38
+ end
39
+
40
+ if db_file.exist?
41
+ setup_db
42
+ end
43
+
44
+ if resque_file.exist?
45
+ setup_resque
46
+ end
47
+ end
48
+
49
+ def build_app
50
+ instance = self
51
+
52
+ Rack::Builder.app {
53
+
54
+ if instance.hoptoad_key
55
+ use Rack::Hoptoad, instance.hoptoad_key
56
+ end
57
+
58
+ map "/ey/sha1" do
59
+ run lambda { [200, {"Content-Type" => "text/plain"}, [instance.sha1]] }
60
+ end
61
+
62
+ if instance.resque_web
63
+ map "/ey/resque" do
64
+ run Resque::Server
65
+ end
66
+ end
67
+
68
+ map "/" do
69
+ run instance.app
70
+ end
71
+ }
72
+ end
73
+
74
+ def setup_db
75
+ DataMapper.setup(:default, ("#{db_adapter}://%s:%s@%s/%s" % db_config))
76
+ end
77
+
78
+ def setup_resque
79
+ Resque.redis = ("%s:%s" % resque_config)
80
+
81
+ if hoptoad_key
82
+ Resque::Failure::Hoptoad.configure do |c|
83
+ c.api_key = hoptoad_key
84
+ c.secure = true
85
+ c.server_environment = @env
86
+ end
87
+ end
88
+ end
89
+
90
+ def db_migrate
91
+ DataMapper.auto_migrate!
92
+ end
93
+
94
+ def valid_envs
95
+ %w[staging production]
96
+ end
97
+
98
+ def db_adapter
99
+ "postgres"
100
+ end
101
+
102
+ def sha1
103
+ `git rev-parse HEAD`.chomp
104
+ end
105
+
106
+ def hoptoad_key
107
+ end
108
+
109
+ def resque_web
110
+ end
111
+
112
+ def db_config
113
+ @db_config ||= YAML.load_file(db_file.to_s).
114
+ fetch(@env).
115
+ values_at("username", "password", "host", "database")
116
+ end
117
+
118
+ def resque_config
119
+ @resque_config ||= YAML.load_file(resque_file.to_s).
120
+ fetch(@env).
121
+ values_at("redis_host", "redis_port")
122
+ end
123
+
124
+ def db_file
125
+ @db_file ||= Pathname("config/database.yml")
126
+ end
127
+
128
+ def resque_file
129
+ @resque_file ||= Pathname("config/resque.yml")
130
+ end
131
+ end
132
+ end
metadata ADDED
@@ -0,0 +1,67 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ey_deployment
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors: []
13
+
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-09-21 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description:
23
+ email:
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/ey/deployment.rb
32
+ has_rdoc: true
33
+ homepage:
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options: []
38
+
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 3
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ hash: 3
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ requirements: []
60
+
61
+ rubyforge_project:
62
+ rubygems_version: 1.3.7
63
+ signing_key:
64
+ specification_version: 3
65
+ summary: wrapper for common app deployment patterns at EY
66
+ test_files: []
67
+