Report abuse

Capfile


			
desc "Uploads a new Nginx configuration file and reloads the config"
task :update_nginx_config do
  # run "cp #{current_path}/config/nginx/#{app}.conf #{nginx_conf}"
  generate_nginx_config
  reload_nginx_config
end

desc "Creates the Nginx config from a template and puts it in the proper location"
task :generate_nginx_config do
  conf = render("config/nginx/acmebrain.conf.erb", :prefix => current_path)
  put(conf, "#{nginx_conf}")
end

desc "Tell Nginx to reload already loaded configuration files"
task :reload_nginx_config do
  sudo "kill -HUP `cat #{nginx}/logs/nginx.pid`"
end

acmebrain.conf.erb


			
upstream acmebrain {
  server 127.0.0.1:8000;
  server 127.0.0.1:8001;
}

# the server directive is nginx's virtual host directive.
server {
  # port to listen on. Can also be set to an IP:PORT
  listen 8080;

  # Set the max size for file uploads to 50Mb
  client_max_body_size 50M;

  # sets the domain[s] that this vhost server requests for
  server_name .acmebrain.dev;

  # doc root
  root <%= prefix %>/public;

  # vhost specific access log
  access_log  log/nginx.acmebrain.access.log  main;

  # this rewrites all the requests to the maintenance.html
  # page if it exists in the doc root. This is for capistrano's
  # disable web task
  if (-f $document_root/system/maintenance.html) {
    rewrite  ^(.*)$  /system/maintenance.html last;
    break;
  }

  location / {
    # needed to forward user's IP address to rails
    proxy_set_header  X-Real-IP  $remote_addr;

    # needed for HTTPS
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect false;
    proxy_max_temp_file_size 0;

    # If the file exists as a static file serve it directly without
    # running all the other rewite tests on it
    if (-f $request_filename) { 
      break; 
    }

    # check for index.html for directory index
    # if its there on the filesystem then rewite 
    # the url to add /index.html to the end of it
    # and then break to send it to the next config rules.
    if (-f $request_filename/index.html) {
      rewrite (.*) $1/index.html break;
    }

    # this is the meat of the rails page caching config
    # it adds .html to the end of the url and then checks
    # the filesystem for that file. If it exists, then we
    # rewite the url to have explicit .html on the end 
    # and then send it on its way to the next config rule.
    # if there is no file on the fs then it sets all the 
    # necessary headers and proxies to our upstream mongrels
    if (-f $request_filename.html) {
      rewrite (.*) $1.html break;
    }

    if (!-f $request_filename) {
      proxy_pass http://acmebrain;
      break;
    }
  }

  error_page   500 502 503 504  /500.html;
  location = /500.html {
    root   <%= prefix %>/public;
  }
}