def create
result_io = ResultIO.new
gears_created = []
begin
self.node_profile = DEFAULT_NODE_PROFILE unless self.node_profile
elaborate_descriptor
self.class.notify_observers(:before_application_create, {:application => self, :reply => result_io})
if self.scalable
raise OpenShift::UserException.new("Scalable app cannot be of type #{UNSCALABLE_FRAMEWORKS.join(' ')}", "108", result_io) if UNSCALABLE_FRAMEWORKS.include? framework
min_gear_count = 0
group_instances.uniq.each { |gi|
min_gear_count += gi.min
}
if ((user.consumed_gears+min_gear_count) > user.max_gears)
raise OpenShift::UserException.new("#{user.login} has a gear limit of #{user.max_gears} and this app requires #{min_gear_count} gears.", 104)
end
end
user.applications = [] unless user.applications
user.applications << self
Rails.logger.debug "Creating gears"
group_instances.uniq.each do |ginst|
create_result, new_gear = ginst.add_gear(self)
result_io.append create_result
end
self.gear.name = self.name unless scalable
self.class.notify_observers(:application_creation_success, {:application => self, :reply => result_io})
rescue Exception => e
Rails.logger.debug e.message
Rails.logger.debug e.backtrace.join("\n")
Rails.logger.debug "Rolling back application gear creation"
result_io.append self.destroy
self.class.notify_observers(:application_creation_failure, {:application => self, :reply => result_io})
raise
ensure
save
end
self.class.notify_observers(:after_application_create, {:application => self, :reply => result_io})
result_io
end