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
-
#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
- #ssh_wrapper ⇒ Object
Constructor Details
#initialize(opts) ⇒ Paths
Returns a new instance of Paths.
95 96 97 98 99 100 101 102 |
# File 'lib/engineyard-serverside/paths.rb', line 95 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
115 116 117 |
# File 'lib/engineyard-serverside/paths.rb', line 115 def active_release @active_release || latest_release end |
#all_releases ⇒ Object
139 140 141 |
# File 'lib/engineyard-serverside/paths.rb', line 139 def all_releases @all_releases ||= Pathname.glob(path(:releases,'*')).sort end |
#deploy_hook(hook_name) ⇒ Object
127 128 129 |
# File 'lib/engineyard-serverside/paths.rb', line 127 def deploy_hook(hook_name) path(:deploy_hooks, "#{hook_name}.rb") end |
#deploy_key ⇒ Object
119 120 121 |
# File 'lib/engineyard-serverside/paths.rb', line 119 def deploy_key path(:home, '.ssh', "#{@app_name}-deploy-key") end |
#deployed? ⇒ Boolean
163 164 165 |
# File 'lib/engineyard-serverside/paths.rb', line 163 def deployed? !!latest_release end |
#executable_deploy_hook(hook_name) ⇒ Object
131 132 133 |
# File 'lib/engineyard-serverside/paths.rb', line 131 def executable_deploy_hook(hook_name) path(:deploy_hooks, "#{hook_name}") end |
#latest_release ⇒ Object
deploy_root/releases/<latest timestamp>
159 160 161 |
# File 'lib/engineyard-serverside/paths.rb', line 159 def latest_release all_releases.last end |
#maintenance_page_candidates ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 |
# File 'lib/engineyard-serverside/paths.rb', line 167 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
110 111 112 |
# File 'lib/engineyard-serverside/paths.rb', line 110 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>
144 145 146 147 148 149 150 151 |
# File 'lib/engineyard-serverside/paths.rb', line 144 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
153 154 155 156 |
# File 'lib/engineyard-serverside/paths.rb', line 153 def previous_revision rel = previous_release(active_release) rel && rel.join('REVISION') end |
#release_dirname ⇒ Object
104 105 106 |
# File 'lib/engineyard-serverside/paths.rb', line 104 def release_dirname Time.now.utc.strftime("%Y%m%d%H%M%S") end |
#repository_cache ⇒ Object
135 136 137 |
# File 'lib/engineyard-serverside/paths.rb', line 135 def repository_cache @repository_cache ||= default_repository_cache end |
#rollback ⇒ Object
179 180 181 182 183 184 185 |
# File 'lib/engineyard-serverside/paths.rb', line 179 def rollback if deployed? && previous_release self.class.new(@opts.dup.merge(:active_release => previous_release)) else nil end end |
#ssh_wrapper ⇒ Object
123 124 125 |
# File 'lib/engineyard-serverside/paths.rb', line 123 def ssh_wrapper path(:shared_config, "#{@app_name}-ssh-wrapper") end |