Class: EY::Serverside::Paths
- Inherits:
-
Object
- Object
- EY::Serverside::Paths
- Defined in:
- lib/engineyard-serverside/paths.rb
Defined Under Namespace
Modules: LegacyHelpers
Constant Summary collapse
- MAINTENANCE_CANDIDATES =
Maintenance page candidates in order of search preference.
[ "public/maintenance.html.custom", "public/maintenance.html.tmp", "public/maintenance.html", "public/system/maintenance.html.default", ]
- DEFAULT_MAINTENANCE_PAGE =
This one is guaranteed to exist.
Pathname.new("default_maintenance_page.html").(File.dirname(__FILE__))
Instance Attribute Summary collapse
-
#deploy_root ⇒ Object
readonly
Returns the value of attribute deploy_root.
-
#home ⇒ Object
readonly
Returns the value of attribute home.
Class Method Summary collapse
-
.def_path(name, parts) ⇒ Object
Define methods that get us paths.
Instance Method Summary collapse
-
#active_release ⇒ Object
If no active release is defined, use current.
- #all_releases ⇒ Object
- #deploy_hook(hook_name) ⇒ Object
- #deploy_key ⇒ Object
- #deployed? ⇒ Boolean
- #executable_deploy_hook(hook_name) ⇒ Object
- #executable_service_hook(service_name, hook_name) ⇒ Object
-
#initialize(opts) ⇒ Paths
constructor
A new instance of Paths.
-
#latest_release ⇒ Object
deploy_root/releases/<latest timestamp>.
- #maintenance_page_candidates ⇒ Object
-
#new_release! ⇒ Object
if active_release is already set, it’s set because we’re operating on an existing release.
-
#path(root, *parts) ⇒ Object
Load a path given a root and more parts Pathname#join is extremely inefficient.
-
#previous_release(from_release = latest_release) ⇒ Object
deploy_root/releases/<release before argument release path>.
- #previous_revision ⇒ Object
- #release_dirname ⇒ Object
- #repository_cache ⇒ Object
- #rollback ⇒ Object
- #service_hook(service_name, hook_name) ⇒ Object
- #ssh_wrapper ⇒ Object
Constructor Details
#initialize(opts) ⇒ Paths
Returns a new instance of Paths.
98 99 100 101 102 103 104 105 |
# File 'lib/engineyard-serverside/paths.rb', line 98 def initialize(opts) @opts = opts @home = Pathname.new(@opts[:home] || ENV['HOME']) @app_name = @opts[:app_name] @active_release = Pathname.new(@opts[:active_release]) if @opts[:active_release] @repository_cache = Pathname.new(@opts[:repository_cache]) if @opts[:repository_cache] @deploy_root = Pathname.new(@opts[:deploy_root] || "/data/#{@app_name}") end |
Instance Attribute Details
#deploy_root ⇒ Object (readonly)
Returns the value of attribute deploy_root.
60 61 62 |
# File 'lib/engineyard-serverside/paths.rb', line 60 def deploy_root @deploy_root end |
#home ⇒ Object (readonly)
Returns the value of attribute home.
60 61 62 |
# File 'lib/engineyard-serverside/paths.rb', line 60 def home @home end |
Class Method Details
.def_path(name, parts) ⇒ Object
Define methods that get us paths
49 50 51 |
# File 'lib/engineyard-serverside/paths.rb', line 49 def self.def_path(name, parts) define_method(name.to_sym) { path(*parts) } end |
Instance Method Details
#active_release ⇒ Object
If no active release is defined, use current
118 119 120 |
# File 'lib/engineyard-serverside/paths.rb', line 118 def active_release @active_release || latest_release end |
#all_releases ⇒ Object
150 151 152 |
# File 'lib/engineyard-serverside/paths.rb', line 150 def all_releases @all_releases ||= Pathname.glob(path(:releases,'*')).sort end |
#deploy_hook(hook_name) ⇒ Object
130 131 132 |
# File 'lib/engineyard-serverside/paths.rb', line 130 def deploy_hook(hook_name) path(:deploy_hooks, "#{hook_name}.rb") end |
#deploy_key ⇒ Object
122 123 124 |
# File 'lib/engineyard-serverside/paths.rb', line 122 def deploy_key path(:home, '.ssh', "#{@app_name}-deploy-key") end |
#deployed? ⇒ Boolean
174 175 176 |
# File 'lib/engineyard-serverside/paths.rb', line 174 def deployed? !!latest_release end |
#executable_deploy_hook(hook_name) ⇒ Object
138 139 140 |
# File 'lib/engineyard-serverside/paths.rb', line 138 def executable_deploy_hook(hook_name) path(:deploy_hooks, "#{hook_name}") end |
#executable_service_hook(service_name, hook_name) ⇒ Object
142 143 144 |
# File 'lib/engineyard-serverside/paths.rb', line 142 def executable_service_hook(service_name, hook_name) path(:shared_hooks, service_name, "#{hook_name}") end |
#latest_release ⇒ Object
deploy_root/releases/<latest timestamp>
170 171 172 |
# File 'lib/engineyard-serverside/paths.rb', line 170 def latest_release all_releases.last end |
#maintenance_page_candidates ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/engineyard-serverside/paths.rb', line 178 def maintenance_page_candidates if latest_release candidates = MAINTENANCE_CANDIDATES.map do |file| path(:latest_release, file) end else candidates = [] end candidates << DEFAULT_MAINTENANCE_PAGE candidates end |
#new_release! ⇒ Object
if active_release is already set, it’s set because we’re operating on an existing release. This happens during integrate
113 114 115 |
# File 'lib/engineyard-serverside/paths.rb', line 113 def new_release! @active_release ||= path(:releases, release_dirname) end |
#path(root, *parts) ⇒ Object
Load a path given a root and more parts Pathname#join is extremely inefficient. This implementation uses much less memory and way fewer objects.
56 57 58 |
# File 'lib/engineyard-serverside/paths.rb', line 56 def path(root, *parts) Pathname.new(File.join(send(root).to_s, *parts)) end |
#previous_release(from_release = latest_release) ⇒ Object
deploy_root/releases/<release before argument release path>
155 156 157 158 159 160 161 162 |
# File 'lib/engineyard-serverside/paths.rb', line 155 def previous_release(from_release=latest_release) index = all_releases.index(from_release) if index && index > 0 all_releases[index-1] else nil end end |
#previous_revision ⇒ Object
164 165 166 167 |
# File 'lib/engineyard-serverside/paths.rb', line 164 def previous_revision rel = previous_release(active_release) rel && rel.join('REVISION') end |
#release_dirname ⇒ Object
107 108 109 |
# File 'lib/engineyard-serverside/paths.rb', line 107 def release_dirname Time.now.utc.strftime("%Y%m%d%H%M%S") end |
#repository_cache ⇒ Object
146 147 148 |
# File 'lib/engineyard-serverside/paths.rb', line 146 def repository_cache @repository_cache ||= default_repository_cache end |
#rollback ⇒ Object
190 191 192 193 194 195 196 |
# File 'lib/engineyard-serverside/paths.rb', line 190 def rollback if deployed? && previous_release self.class.new(@opts.dup.merge(:active_release => previous_release)) else nil end end |
#service_hook(service_name, hook_name) ⇒ Object
134 135 136 |
# File 'lib/engineyard-serverside/paths.rb', line 134 def service_hook(service_name, hook_name) path(:shared_hooks, service_name, "#{hook_name}.rb") end |
#ssh_wrapper ⇒ Object
126 127 128 |
# File 'lib/engineyard-serverside/paths.rb', line 126 def ssh_wrapper path(:shared_config, "#{@app_name}-ssh-wrapper") end |