ey_deployment 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
+