Methods

Class/Module Index [+]

Quicksearch

Nanoc::Extra::Deployers::Fog

A deployer that deploys a site using [fog](github.com/geemus/fog).

@example A deployment configuration with public and staging configurations

deploy:
  public:
    kind:       fog
    provider:   local
    local_root: ~/myCloud
    bucket:     nanoc-site
  staging:
    kind:       fog
    provider:   local
    local_root: ~/myCloud
    bucket:     nanoc-site-staging

Public Instance Methods

run() click to toggle source

@see Nanoc::Extra::Deployer#run

# File lib/nanoc/extra/deployers/fog.rb, line 22
def run
  require 'fog'

  # Get params
  src      = File.expand_path(self.source_path)
  bucket   = self.config.delete(:bucket) || self.config.delete(:bucket_name)
  path     = self.config[:path]

  self.config.delete(:kind)

  # Validate params
  error 'The path requires no trailing slash' if path && path[-1,1] == '/'

  # Mock if necessary
  if self.dry_run?
    ::Fog.mock!
  end

  # Get connection
  puts "Connecting"
  connection = ::Fog::Storage.new(self.config)

  # Get bucket
  puts "Getting bucket"
  begin
    directory = connection.directories.get(bucket)
  rescue ::Excon::Errors::NotFound
    should_create_bucket = true
  end
  should_create_bucket = true if directory.nil?

  # Create bucket if necessary
  if should_create_bucket
    directory = connection.directories.create(:key => bucket)
  end

  # Get list of remote files
  files = directory.files
  truncated = files.respond_to?(:is_truncated) && files.is_truncated
  while truncated
    set = directory.files.all(:marker => files.last.key)
    truncated = set.is_truncated
    files = files + set
  end
  keys_to_destroy = files.all.map {|file| file.key}

  # Upload all the files in the output folder to the clouds
  puts "Uploading local files"
  FileUtils.cd(src) do
    files = Dir['**/*'].select { |f| File.file?(f) }
    files.each do |file_path|
      key = "#{path}#{file_path}"
      directory.files.create(
        :key => key,
        :body => File.open(file_path),
        :public => true)
      keys_to_destroy.delete(key)
    end
  end

  # delete extraneous remote files
  puts "Removing remote files"
  keys_to_destroy.each do |key|
    directory.files.get(key).destroy
  end

  puts "Done!"
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.