cheese 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +0 -0
- data/History.txt +0 -0
- data/LICENSE +22 -0
- data/Manifest.txt +30 -0
- data/README.txt +132 -0
- data/Rakefile +54 -0
- data/TODO.txt +11 -0
- data/bin/cheese +118 -0
- data/data/templates/footer.inc +1 -0
- data/data/templates/header.inc +46 -0
- data/data/templates/mongrel.inc +7 -0
- data/data/templates/proxy.inc +3 -0
- data/data/templates/vhost.inc +84 -0
- data/lib/cheese-setup.rb +144 -0
- data/lib/cheese/version.rb +9 -0
- data/lib/controller.rb +152 -0
- data/lib/database/mysql.rb +50 -0
- data/lib/database/postgresql.rb +29 -0
- data/lib/process.rb +17 -0
- data/lib/scm/subversion.rb +83 -0
- data/lib/verbose.rb +37 -0
- data/lib/web/domain.rb +22 -0
- data/lib/web/mongrel.rb +30 -0
- data/lib/web/nginx.rb +223 -0
- data/lib/web/proxy.rb +25 -0
- data/lib/web/virtual_host.rb +24 -0
- data/setup.rb +1360 -0
- metadata +80 -0
data/CHANGELOG.txt
ADDED
File without changes
|
data/History.txt
ADDED
File without changes
|
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2007 Jamie van Dyke
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person
|
4
|
+
obtaining a copy of this software and associated documentation
|
5
|
+
files (the "Software"), to deal in the Software without
|
6
|
+
restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8
|
+
copies of the Software, and to permit persons to whom the
|
9
|
+
Software is furnished to do so, subject to the following
|
10
|
+
conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be
|
13
|
+
included in all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
17
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
19
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
20
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
21
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
CHANGELOG.txt
|
2
|
+
History.txt
|
3
|
+
LICENSE
|
4
|
+
Manifest.txt
|
5
|
+
README.txt
|
6
|
+
Rakefile
|
7
|
+
setup.rb
|
8
|
+
TODO.txt
|
9
|
+
|
10
|
+
bin/cheese
|
11
|
+
|
12
|
+
data/templates/footer.inc
|
13
|
+
data/templates/header.inc
|
14
|
+
data/templates/mongrel.inc
|
15
|
+
data/templates/proxy.inc
|
16
|
+
data/templates/vhost.inc
|
17
|
+
|
18
|
+
lib/cheese-setup.rb
|
19
|
+
lib/controller.rb
|
20
|
+
lib/process.rb
|
21
|
+
lib/verbose.rb
|
22
|
+
lib/cheese/version.rb
|
23
|
+
lib/database/mysql.rb
|
24
|
+
lib/database/postgresql.rb
|
25
|
+
lib/scm/subversion.rb
|
26
|
+
lib/web/domain.rb
|
27
|
+
lib/web/mongrel.rb
|
28
|
+
lib/web/nginx.rb
|
29
|
+
lib/web/proxy.rb
|
30
|
+
lib/web/virtual_host.rb
|
data/README.txt
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
== Cheese
|
2
|
+
|
3
|
+
Cheese is a set of ruby scripts supplied with all Candid Mush
|
4
|
+
Virtual Cheesey Servers but available to all under the MIT license.
|
5
|
+
They reduce the steps needed to administrate a web server.
|
6
|
+
|
7
|
+
Currently this script is executed server side, but we're looking
|
8
|
+
into using Capistrano to manage it instead.
|
9
|
+
|
10
|
+
Cheese Tools can:
|
11
|
+
|
12
|
+
* Add nginx virtual hosts
|
13
|
+
* Replace nginx virtual hosts
|
14
|
+
* Remove nginx virtual hosts
|
15
|
+
* Create subversion repositories
|
16
|
+
* Remove subversion repositories
|
17
|
+
* Set access rights on subversion repositories
|
18
|
+
* Create mysql/pgsql databases
|
19
|
+
* Delete mysql/pgsql databases
|
20
|
+
|
21
|
+
Cheese Tools will be able to:
|
22
|
+
|
23
|
+
* Configure monit to watch your sites and svnserve
|
24
|
+
* Configure a scheduled backup of your sites and source to s3
|
25
|
+
|
26
|
+
|
27
|
+
== Requirements
|
28
|
+
|
29
|
+
Gems:
|
30
|
+
* Rubygems
|
31
|
+
* OptionParser
|
32
|
+
* Highline
|
33
|
+
|
34
|
+
Nginx Config
|
35
|
+
If you are using this on an existing nginx.conf file, you must wrap your vhosts like so:
|
36
|
+
|
37
|
+
#### VHOST something.com BEGIN ####
|
38
|
+
server {
|
39
|
+
...
|
40
|
+
}
|
41
|
+
#### VHOST something.com END ####
|
42
|
+
|
43
|
+
#### PROXY something.com BEGIN ####
|
44
|
+
upstream something_com_mongrel {
|
45
|
+
...
|
46
|
+
}
|
47
|
+
#### PROXY something.com END ####
|
48
|
+
|
49
|
+
and the proxies that each use like so:
|
50
|
+
|
51
|
+
|
52
|
+
This is temporary until I improve my regex skills somewhat, or someone
|
53
|
+
changes it for me.
|
54
|
+
|
55
|
+
== Setup
|
56
|
+
|
57
|
+
Before you can use Cheese you need to run cheese --setup, you will be
|
58
|
+
notified of this if you forget, however, this can be re-run if you
|
59
|
+
wish to change any options you have previously set.
|
60
|
+
|
61
|
+
The Cheese setup utility:
|
62
|
+
|
63
|
+
* Asks what type of setup you have (out of the supported sets)
|
64
|
+
* Saves a default source code management username and password
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
== Switches
|
69
|
+
|
70
|
+
-L or --list-vhosts
|
71
|
+
List the vhosts contained in the /etc/nginx/nginx.conf file
|
72
|
+
|
73
|
+
--setup
|
74
|
+
Run the setup utility which saves preferences to /etc/cheese/cheese.conf
|
75
|
+
|
76
|
+
--domain domain-name.com
|
77
|
+
Set the domain name to use
|
78
|
+
--mongrel-threads
|
79
|
+
Let Cheese Tools know how many threads you want to run
|
80
|
+
|
81
|
+
--remove
|
82
|
+
Remove this vhost and the subversion repository
|
83
|
+
|
84
|
+
--svn-read-all
|
85
|
+
Set svnserve to allow anonymous read on the subversion repository
|
86
|
+
|
87
|
+
--pgsql
|
88
|
+
Use PostgreSQL instead of MySQL which is the default
|
89
|
+
|
90
|
+
--skip-nginx
|
91
|
+
Don't add a vhost or restart nginx
|
92
|
+
--skip-svn
|
93
|
+
Don't create a subversion repository or attempt to add files to one
|
94
|
+
--skip-mongrel-config
|
95
|
+
Don't create a mongrel_cluster.yml config file
|
96
|
+
--skip-database
|
97
|
+
Don't create the database
|
98
|
+
--only-nginx
|
99
|
+
Only add/replace a vhost and restart nginx
|
100
|
+
--only-svn
|
101
|
+
Only create a subversion repository and standard file structure
|
102
|
+
--only-mongrel-config
|
103
|
+
Only create a mongrel_cluster.yml config file
|
104
|
+
--only-database
|
105
|
+
Only create the database
|
106
|
+
|
107
|
+
== Usage
|
108
|
+
|
109
|
+
To create a new web application with a subversion repository which stores
|
110
|
+
the source and a mongrel_cluster config:
|
111
|
+
|
112
|
+
./cheese --domain candidmush.com --mongrel-threads 2
|
113
|
+
|
114
|
+
The steps cheese will take are:
|
115
|
+
|
116
|
+
* Add a vhost to /etc/nginx/nginx.conf
|
117
|
+
* Add a mongrel proxy declaration to /etc/nginx/nginx.conf
|
118
|
+
* Create a subversion repository in /var/src/candidmush.com
|
119
|
+
* The standard structure of branches/tags/trunk will be added
|
120
|
+
* Add a Cap config file to trunk/config/deploy.rb
|
121
|
+
* Add a mongrel_cluster config to trunk/config/mongrel_cluster.yml
|
122
|
+
* Start mongrel_cluster for this server
|
123
|
+
* Restart nginx
|
124
|
+
|
125
|
+
|
126
|
+
== Details
|
127
|
+
|
128
|
+
The port range to use for mongrel_cluster will be determined by finding
|
129
|
+
the highest port range used by other vhosts and incrementing it by 10.
|
130
|
+
|
131
|
+
If the vhost in nginx for the domain you are adding already exists,
|
132
|
+
Cheese Tools will replace it rather than add another.
|
data/Rakefile
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'hoe'
|
11
|
+
include FileUtils
|
12
|
+
require File.join(File.dirname(__FILE__), 'lib', 'cheese', 'version')
|
13
|
+
|
14
|
+
AUTHOR = "Jamie van Dyke"
|
15
|
+
EMAIL = "jamie@writtenpath.com"
|
16
|
+
DESCRIPTION = "Automate the creation of web applications and accompanying pieces e.g. Nginx, Subversion, Mongrel, Monit, S3."
|
17
|
+
GEM_NAME = "cheese"
|
18
|
+
RUBYFORGE_PROJECT = "cheese"
|
19
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
20
|
+
|
21
|
+
|
22
|
+
NAME = "cheese"
|
23
|
+
REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
24
|
+
VERS = ENV['VERSION'] || (Cheese::VERSION::STRING + (REV ? ".#{REV}" : ""))
|
25
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
26
|
+
RDOC_OPTS = ['--quiet', '--title', "cheese documentation",
|
27
|
+
"--opname", "index.html",
|
28
|
+
"--line-numbers",
|
29
|
+
"--main", "README",
|
30
|
+
"--inline-source"]
|
31
|
+
|
32
|
+
class Hoe
|
33
|
+
def extra_deps
|
34
|
+
@extra_deps.reject { |x| Array(x).first == 'hoe' }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Generate all the Rake tasks
|
39
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
40
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
41
|
+
p.author = AUTHOR
|
42
|
+
p.description = DESCRIPTION
|
43
|
+
p.email = EMAIL
|
44
|
+
p.summary = DESCRIPTION
|
45
|
+
p.url = HOMEPATH
|
46
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
47
|
+
p.test_globs = ["test/**/*_test.rb"]
|
48
|
+
p.clean_globs = CLEAN #An array of file patterns to delete on clean.
|
49
|
+
|
50
|
+
# == Optional
|
51
|
+
#p.changes - A description of the release's latest changes.
|
52
|
+
p.extra_deps = ['highline', ">= 1.2.0"]
|
53
|
+
#p.spec_extras - A hash of extra values to set in the gemspec.
|
54
|
+
end
|
data/TODO.txt
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Things to implement in order of priority:
|
2
|
+
|
3
|
+
* TESTS TESTS TESTS!
|
4
|
+
* Monit services
|
5
|
+
* S3 backup
|
6
|
+
* Allow mongrel to use a set port
|
7
|
+
* Remove the parsing of the entire nginx file and use includes
|
8
|
+
|
9
|
+
Things to look into:
|
10
|
+
|
11
|
+
* Using Capistrano to manage this remotely
|
data/bin/cheese
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'optparse'
|
6
|
+
require 'fileutils'
|
7
|
+
|
8
|
+
class Arguments < Hash
|
9
|
+
def initialize(args)
|
10
|
+
super
|
11
|
+
|
12
|
+
opts = OptionParser.new do |opts|
|
13
|
+
opts.banner = "Usage: #$0 [options]"
|
14
|
+
|
15
|
+
self[:setup] = false
|
16
|
+
self[:actions] = [:scm, :web_server, :app_server, :database]
|
17
|
+
self[:thread_count] = 1
|
18
|
+
self[:database_type] = :postgresql
|
19
|
+
self[:remove] = false
|
20
|
+
self[:svn_anon_read] = false
|
21
|
+
self[:verbose] = false
|
22
|
+
self[:dry_run] = false
|
23
|
+
|
24
|
+
opts.on('-n STRING', '--name STRING', String, '[REQUIRED] set the name to use') do |name|
|
25
|
+
self[:name] = name
|
26
|
+
end
|
27
|
+
|
28
|
+
opts.on('--setup', 'setup your preferences') do
|
29
|
+
self[:setup] = true
|
30
|
+
end
|
31
|
+
|
32
|
+
opts.on('--remove', 'remove instead of create') do
|
33
|
+
self[:remove] = true
|
34
|
+
end
|
35
|
+
|
36
|
+
opts.on('-t NUMBER', '--threads NUMBER', Integer,
|
37
|
+
'[DEFAULT=1] how many app server threads to listen on') do |thread_count|
|
38
|
+
self[:thread_count] = thread_count
|
39
|
+
end
|
40
|
+
|
41
|
+
opts.on('--scm-anon-read', 'set the scm to allow anonymous read on the source repository') do |anon|
|
42
|
+
self[:scm_anon_read] = anon
|
43
|
+
end
|
44
|
+
|
45
|
+
opts.on('-D', '--database-type STRING', [:mysql, :postgresql],
|
46
|
+
'pass in the database type, currently { mysql || postgresql (default) }') do |dtype|
|
47
|
+
self[:database_type] = dtype
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on('--only-web-server', 'only add/replace a vhost and restart the web server (e.g. nginx)') do
|
51
|
+
self[:actions] = [:web_server]
|
52
|
+
end
|
53
|
+
|
54
|
+
opts.on('--only-scm', 'only create a scm repository and standard file structure') do
|
55
|
+
self[:actions] = [:scm]
|
56
|
+
end
|
57
|
+
|
58
|
+
opts.on('--only-app-config', 'only create an app server config file') do
|
59
|
+
self[:actions] = [:app_server]
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on('--only-database', 'only create the database') do
|
63
|
+
self[:actions] = [:database]
|
64
|
+
end
|
65
|
+
|
66
|
+
opts.on('--skip-web-server', 'skip adding/replacing a vhost and restarting the web server (e.g. nginx)') do
|
67
|
+
self[:actions] -= [:web_server]
|
68
|
+
end
|
69
|
+
|
70
|
+
opts.on('--skip-scm',
|
71
|
+
'skip creating a source repository and standard file structure') do
|
72
|
+
self[:actions] -= [:scm]
|
73
|
+
end
|
74
|
+
|
75
|
+
opts.on('--skip-app-config', 'skip creating an app server config file') do
|
76
|
+
self[:actions] -= [:app_server]
|
77
|
+
end
|
78
|
+
|
79
|
+
opts.on('--skip-database', 'skip creating the database') do
|
80
|
+
self[:actions] -= [:database]
|
81
|
+
end
|
82
|
+
|
83
|
+
opts.on('-L', '--list-vhosts', 'list the vhosts contained in our web server') do
|
84
|
+
self[:actions] = [:list_vhosts]
|
85
|
+
end
|
86
|
+
|
87
|
+
opts.on_tail('-v', '--verbose', 'be verbose about what action is being taken') do
|
88
|
+
self[:verbose] = true
|
89
|
+
end
|
90
|
+
|
91
|
+
opts.on_tail('--dry-run', 'fake all of the actions') do
|
92
|
+
self[:dry_run] = true
|
93
|
+
end
|
94
|
+
|
95
|
+
opts.on_tail('-h', '--help', 'display this help and exit') do
|
96
|
+
puts opts
|
97
|
+
exit
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
opts.parse!(args)
|
102
|
+
if self[:name].empty? and !self[:list_vhosts]
|
103
|
+
puts "You must specify a name with the --name switch e.g. your-domain.com"
|
104
|
+
exit
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Default arguments to help if no arguments given
|
110
|
+
argv = ARGV.empty? ? ["-h"] : ARGV
|
111
|
+
options = Arguments.new(argv)
|
112
|
+
|
113
|
+
if options[:setup]
|
114
|
+
require 'cheese-setup'
|
115
|
+
else
|
116
|
+
require 'controller'
|
117
|
+
controller = Cheese::Controller.new(options)
|
118
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
user www-data;
|
2
|
+
worker_processes 3;
|
3
|
+
|
4
|
+
error_log /var/log/nginx/error.log;
|
5
|
+
pid /var/run/nginx.pid;
|
6
|
+
|
7
|
+
events {
|
8
|
+
worker_connections 1024;
|
9
|
+
}
|
10
|
+
|
11
|
+
|
12
|
+
# start the http module where we config http access.
|
13
|
+
http {
|
14
|
+
# pull in mime-types. You can break out your config
|
15
|
+
# into as many include's as you want to make it cleaner
|
16
|
+
include /etc/nginx/mime.types;
|
17
|
+
|
18
|
+
# set a default type for the rare situation that
|
19
|
+
# nothing matches from the mimie-type include
|
20
|
+
default_type application/octet-stream;
|
21
|
+
|
22
|
+
# configure log format
|
23
|
+
log_format main '$remote_addr - $remote_user [$time_local] $status '
|
24
|
+
'"$request" $body_bytes_sent "$http_referer" '
|
25
|
+
'"$http_user_agent" "$http_x_forwarded_for"';
|
26
|
+
|
27
|
+
# main access log
|
28
|
+
access_log /var/log/nginx_access.log main;
|
29
|
+
|
30
|
+
# main error log
|
31
|
+
error_log /var/log/nginx_error.log debug;
|
32
|
+
|
33
|
+
sendfile on;
|
34
|
+
|
35
|
+
# increase the url length limit
|
36
|
+
server_names_hash_bucket_size 128;
|
37
|
+
|
38
|
+
# These are good default values.
|
39
|
+
tcp_nopush on;
|
40
|
+
tcp_nodelay off;
|
41
|
+
# output compression saves bandwidth
|
42
|
+
gzip on;
|
43
|
+
gzip_http_version 1.0;
|
44
|
+
gzip_comp_level 2;
|
45
|
+
gzip_proxied any;
|
46
|
+
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
@@ -0,0 +1,84 @@
|
|
1
|
+
server {
|
2
|
+
# port to listen on. Can also be set to an IP:PORT
|
3
|
+
listen 80;
|
4
|
+
|
5
|
+
# Set the max size for file uploads to 50Mb
|
6
|
+
client_max_body_size 50M;
|
7
|
+
|
8
|
+
# sets the domain[s] that this vhost server requests for
|
9
|
+
server_name ||DOMAIN|| www.||DOMAIN||;
|
10
|
+
|
11
|
+
# redirect blank to www
|
12
|
+
if ($host != 'www.||DOMAIN||' ) {
|
13
|
+
rewrite ^/(.*)$ http://www.||DOMAIN||/$1 permanent;
|
14
|
+
}
|
15
|
+
|
16
|
+
# doc root
|
17
|
+
root /var/www/||DOMAIN||/current/public;
|
18
|
+
|
19
|
+
# vhost specific access log
|
20
|
+
access_log /var/log/nginx_||DOMAIN||.access.log main;
|
21
|
+
|
22
|
+
|
23
|
+
# this rewrites all the requests to the maintenance.html
|
24
|
+
# page if it exists in the doc root. This is for capistrano's
|
25
|
+
# disable web task
|
26
|
+
if (-f $document_root/system/maintenance.html) {
|
27
|
+
rewrite ^(.*)$ /system/maintenance.html last;
|
28
|
+
break;
|
29
|
+
}
|
30
|
+
|
31
|
+
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov).*?$ {
|
32
|
+
root /var/www/||SHORT_DOMAIN||/current/public;
|
33
|
+
if (!-f $request_filename) {
|
34
|
+
proxy_pass http://||PROXY||_mongrel;
|
35
|
+
break;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
location / {
|
40
|
+
# needed to forward user's IP address to rails
|
41
|
+
proxy_set_header X-Real-IP $remote_addr;
|
42
|
+
|
43
|
+
# needed for HTTPS
|
44
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
45
|
+
proxy_set_header Host $http_host;
|
46
|
+
proxy_redirect false;
|
47
|
+
proxy_max_temp_file_size 0;
|
48
|
+
|
49
|
+
# If the file exists as a static file serve it directly without
|
50
|
+
# running all the other rewite tests on it
|
51
|
+
if (-f $request_filename) {
|
52
|
+
break;
|
53
|
+
}
|
54
|
+
|
55
|
+
# check for index.html for directory index
|
56
|
+
# if its there on the filesystem then rewite
|
57
|
+
# the url to add /index.html to the end of it
|
58
|
+
# and then break to send it to the next config rules.
|
59
|
+
if (-f $request_filename/index.html) {
|
60
|
+
rewrite (.*) $1/index.html break;
|
61
|
+
}
|
62
|
+
|
63
|
+
# this is the meat of the rails page caching config
|
64
|
+
# it adds .html to the end of the url and then checks
|
65
|
+
# the filesystem for that file. If it exists, then we
|
66
|
+
# rewite the url to have explicit .html on the end
|
67
|
+
# and then send it on its way to the next config rule.
|
68
|
+
# if there is no file on the fs then it sets all the
|
69
|
+
# necessary headers and proxies to our upstream mongrels
|
70
|
+
if (-f $request_filename.html) {
|
71
|
+
rewrite (.*) $1.html break;
|
72
|
+
}
|
73
|
+
|
74
|
+
if (!-f $request_filename) {
|
75
|
+
proxy_pass http://||PROXY||_mongrel;
|
76
|
+
break;
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
error_page 500 502 503 504 /500.html;
|
81
|
+
location = /500.html {
|
82
|
+
root /var/www/||DOMAIN||/current/public;
|
83
|
+
}
|
84
|
+
}
|