Sha256: faf45323d8589e6f90a1494a4831d679eee2e3b4ded358ae029c2c811a690e00

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

require 'ostruct'
require 'erb'

module VhostGenerator

  # Nginx VhostGenerator
  #
  class NginxGenerator
    attr_reader :cfg, :options
    def initialize(cfg, options={})
      @cfg = cfg
      @options = OpenStruct.new(default_options.merge(options))
      @options.upstream ||= cfg.application
      @options.freeze
    end

    def render
      template.result(binding)
    end

    protected

    def default_options
      Hash[ 'client_max_body_size' => '4G', 'keepalive_timeout' => '10',
            'assets_expire_in' => '60d' ].freeze
    end

    private

    def template
      @template ||= ERB.new <<EOF
#### FILE GENERATED BY `<%= String(cfg.cmdline) %>`, EDIT AT YOUR OWN RISK ####

upstream <%= options.upstream %> {
<% cfg.instance_ports.each do |p| %>  server localhost:<%= p %> fail_timeout=0;
<% end %>}

server {
  <% cfg.server_ports.each do |p| %>listen <%= p %>;
  <% end %>
  <% unless cfg.server_names.empty? %>server_name <%=
       cfg.server_names.join(', ') %>;<% end %>

  root <%= cfg.static_folder %>;

  try_files $uri/index.html $uri @upstream;
  location @upstream {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://<%= options.upstream %>;
  }

  location <%= cfg.relative_root %>assets {
    gzip_static on; # to serve pre-gzipped version
    expires <%= options.assets_expire_in %>;
    add_header  Cache-Control public;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size <%= options.client_max_body_size %>;
  keepalive_timeout <%= options.keepalive_timeout %>;
}
EOF
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
vhost_generator-0.3.1 lib/vhost_generator/nginx_generator.rb
vhost_generator-0.3.0 lib/vhost_generator/nginx_generator.rb