我的解決辦法:
- 通過URL配置創建一個維護模式模板,並鏈接到它,所以當訪問/維修不足/顯示維護頁面。
- 然後,配置apache以測試是否存在'maintenance-mode-on'文件,如果存在,請將302重定向到維護模式頁面的url。
- 如果存在「維護模式關閉」文件,則配置apache將從重定向到主頁的維護模式URL。
- 結構腳本,便於在維護模式開啓和維護模式關閉之間切換文件。
下面是Apache的配置文件中的相關章節:
RewriteEngine On
# If this file (toggle file) exists then put the site into maintenance mode
RewriteCond /path/to/toggle/file/maintenance-mode-on -f
RewriteCond %{REQUEST_URI} !^/static.*
RewriteCond %{REQUEST_URI} !^/admin.*
RewriteCond %{REQUEST_URI} !^/under-maintenance/
# redirect to the maintenance mode page
RewriteRule ^(.*) /under-maintenance/ [R,L]
#If not under maintenance mode, redirect away from the maintenance page
RewriteCond /path/to/toggle/file/maintenance-mode-off -f
RewriteCond %{REQUEST_URI} ^/under-maintenance/
RewriteRule ^(.*)/[R,L]
然後織物腳本的相關部分:
env.var_dir = '/path/to/toggle/file/'
def is_in_mm():
"Returns whether the site is in maintenance mode"
return files.exists(os.path.join(env.var_dir, 'maintenance-mode-on'))
@task
def mm_on():
"""Turns on maintenance mode"""
if not is_in_mm():
with cd(env.var_dir):
run('mv maintenance-mode-off maintenance-mode-on')
utils.fastprint('Turned on maintenance mode.')
else:
utils.error('The site is already in maintenance mode!')
@task
def mm_off():
"""Turns off maintenance mode"""
if is_in_mm():
with cd(env.var_dir):
run('mv maintenance-mode-on maintenance-mode-off')
utils.fastprint('Turned off maintenance mode.')
else:
utils.error('The site is not in maintenance mode!')
這種運作良好,但它不依賴於Django的處理維護模式期間的請求;這將是很好的服務一個靜態文件。
This [question](http://stackoverflow.com/questions/6237514/write-to-a-remote-file-with-fabric)可能有關。我對織物不太瞭解,我不是故意粗魯,但是,沒有使用SSH並且更改一個設置線相當容易?這是一個遠程方法 – 2011-06-10 16:58:31
由於瀏覽器緩存,我發現Garth Humphreys的方法並不好。它導致以下情況之一: - 在維護模式期間看到非維護模式頁面 - 未處於維護模式時看到維護模式頁面 我會將我的調整解決方案放在單獨的答案中。 – seddonym 2013-05-24 10:51:06