Bạn nên thiết lập trang bảo trì nếu ứng dụng sẽ không khả dụng trong một thời gian. Tôi sử dụng nhiệm vụ Capistrano này:
namespace :deploy do
namespace :web do
desc <<-DESC
Present a maintenance page to visitors. Disables your application's web \
interface by writing a "maintenance.html" file to each web server. The \
servers must be configured to detect the presence of this file, and if \
it is present, always display it instead of performing the request.
By default, the maintenance page will just say the site is down for \
"maintenance", and will be back "shortly", but you can customize the \
page by specifying the REASON and UNTIL environment variables:
$ cap deploy:web:disable \\
REASON="a hardware upgrade" \\
UNTIL="12pm Central Time"
Further customization will require that you write your own task.
DESC
task :disable, :roles => :web do
require 'erb'
on_rollback { run "rm #{shared_path}/system/maintenance.html" }
reason = ENV['REASON']
deadline = ENV['UNTIL']
template = File.read('app/views/admin/maintenance.html.erb')
page = ERB.new(template).result(binding)
put page, "#{shared_path}/system/maintenance.html", :mode => 0644
end
end
end
File app/views/admin/maintenance.html.erb
nên chứa:
<p>We’re currently offline for <%= reason ? reason : 'maintenance' %> as of <%= Time.now.utc.strftime('%H:%M %Z') %>.</p>
<p>Sorry for the inconvenience. We’ll be back <%= deadline ? "by #{deadline}" : 'shortly' %>.</p>
Bước cuối cùng là cấu hình máy chủ ảo Apache với một số chỉ thị để tìm kiếm các tập tin maintenance.html
và chuyển hướng tất cả các yêu cầu tới nó nếu nó hiện:
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect all requests to the maintenance page if present
RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|png)$
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /system/maintenance.html [L]
</IfModule>
để đưa các ứng dụng vào chế độ bảo trì, chạy cap deploy:web:disable
và để làm cho nó sống ag ain làm cap deploy:web:enable
.
Nguồn
2010-02-11 13:46:43
Trang bảo trì có được phục vụ với "200 OK" hoặc "503 Dịch vụ tạm thời không khả dụng" không? Google có thể nghĩ, nội dung quý giá của bạn có thể đã biến mất, nếu bạn phân phối nó với 200 OK. Xem http://googlewebmastercentral.blogspot.com/2011/01/how-to-deal-with-planned-site-downtime.html – iGEL
Điểm tốt, Capistrano tự đề xuất đoạn mã sau cho .htaccess: https: // gist .github.com/1292705 –
Bạn quên tác vụ 'enable'! –