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.
- data/lib/ey/deployment.rb +132 -0
- 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
|
+
|