Class: EY::Serverside::Paths

Inherits:
Object
  • Object
show all
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").expand_path(File.dirname(__FILE__))

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Paths

Returns a new instance of Paths.



90
91
92
93
94
95
96
97
# File 'lib/engineyard-serverside/paths.rb', line 90

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_rootObject (readonly)

Returns the value of attribute deploy_root.



58
59
60
# File 'lib/engineyard-serverside/paths.rb', line 58

def deploy_root
  @deploy_root
end

#homeObject (readonly)

Returns the value of attribute home.



58
59
60
# File 'lib/engineyard-serverside/paths.rb', line 58

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_releaseObject



115
116
117
# File 'lib/engineyard-serverside/paths.rb', line 115

def active_release
  @active_release ||= path(:releases, Time.now.utc.strftime("%Y%m%d%H%M%S"))
end

#all_releasesObject



119
120
121
# File 'lib/engineyard-serverside/paths.rb', line 119

def all_releases
  @all_releases ||= Pathname.glob(releases.join('*')).sort
end

#deploy_hook(hook_name) ⇒ Object



107
108
109
# File 'lib/engineyard-serverside/paths.rb', line 107

def deploy_hook(hook_name)
  path(:active_release, 'deploy', "#{hook_name}.rb")
end

#deploy_keyObject



99
100
101
# File 'lib/engineyard-serverside/paths.rb', line 99

def deploy_key
  path(:home, '.ssh', "#{@app_name}-deploy-key")
end

#deployed?Boolean

Returns:

  • (Boolean)


143
144
145
# File 'lib/engineyard-serverside/paths.rb', line 143

def deployed?
  !!latest_release
end

#latest_releaseObject

deploy_root/releases/<latest timestamp>



139
140
141
# File 'lib/engineyard-serverside/paths.rb', line 139

def latest_release
  all_releases.last
end

#maintenance_page_candidatesObject



147
148
149
150
151
152
153
154
155
156
157
# File 'lib/engineyard-serverside/paths.rb', line 147

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

#path(root, *parts) ⇒ Object

Load a path given a root and more parts



54
55
56
# File 'lib/engineyard-serverside/paths.rb', line 54

def path(root, *parts)
  send(root).join(*parts)
end

#previous_release(from_release = latest_release) ⇒ Object

deploy_root/releases/<release before argument release path>



124
125
126
127
128
129
130
131
# File 'lib/engineyard-serverside/paths.rb', line 124

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_revisionObject



133
134
135
136
# File 'lib/engineyard-serverside/paths.rb', line 133

def previous_revision
  rel = previous_release(active_release)
  rel && rel.join('REVISION')
end

#repository_cacheObject



111
112
113
# File 'lib/engineyard-serverside/paths.rb', line 111

def repository_cache
  @repository_cache ||= default_repository_cache
end

#rollbackObject



159
160
161
162
163
164
165
# File 'lib/engineyard-serverside/paths.rb', line 159

def rollback
  if deployed? && previous_release
    self.class.new(@opts.dup.merge(:active_release => previous_release))
  else
    nil
  end
end

#ssh_wrapperObject



103
104
105
# File 'lib/engineyard-serverside/paths.rb', line 103

def ssh_wrapper
  path(:shared_config, "#{@app_name}-ssh-wrapper")
end