Ruby on rails 在服务器上执行修改时,Ruby/Rails显示常规屏幕
我有一个运行服务器的ruby on rails应用程序,有时需要将其关闭以进行更新/等等。现在,我看到的一种方法是在更新期间(当应用程序关闭时)有一个通用显示屏就是替换/srv/www/目录中的文件,让它在用户可能导航到的任何地方显示一个通用屏幕。我还想过使用一个中央控制器文件来连接所有其他文件(基本上是一个主文件),但这对于rails来说似乎是违反直觉的 有许多指向网站不同组件的外部链接,用户可以从外部导航到这些组件,我需要确保当应用程序关闭一小会儿时,他们总是收到这个通用更新屏幕 我想知道是否有人有其他想法。。。。也许是图书馆之类的,我似乎在网上找不到任何东西。如有任何建议,将不胜感激Ruby on rails 在服务器上执行修改时,Ruby/Rails显示常规屏幕,ruby-on-rails,ruby-on-rails-plugins,Ruby On Rails,Ruby On Rails Plugins,我有一个运行服务器的ruby on rails应用程序,有时需要将其关闭以进行更新/等等。现在,我看到的一种方法是在更新期间(当应用程序关闭时)有一个通用显示屏就是替换/srv/www/目录中的文件,让它在用户可能导航到的任何地方显示一个通用屏幕。我还想过使用一个中央控制器文件来连接所有其他文件(基本上是一个主文件),但这对于rails来说似乎是违反直觉的 有许多指向网站不同组件的外部链接,用户可以从外部导航到这些组件,我需要确保当应用程序关闭一小会儿时,他们总是收到这个通用更新屏幕 我想知道是
谢谢我将配置您的Web服务器(nginx或apache)以查找maintenance.html页面,如果存在,则提供503状态。因此,下载应用程序的每个URL非常简单,只需上传一个.html文件,完成后将其删除即可
有关更多信息,请参阅和 Capistrano有一系列用于显示维护页面的内置方法,并与git/subversion完全集成。使部署和管理变得轻而易举。我使用此Capistrano任务:
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
最后一步是使用一些指令配置Apache虚拟主机,以查找maintenance.html
文件,并将所有请求重定向到该文件(如果存在):
<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>
重新启动发动机
#将所有请求重定向到维护页面(如果存在)
重写条件%{REQUEST\u URI}!\。(css | gif | jpg | png)$
重写cond%{DOCUMENT_ROOT}/system/maintenance.html-f
重写cond%{SCRIPT_FILENAME}!maintenance.html
重写规则^.*$/system/maintenance.html[L]
要将应用程序置于维护模式,请运行
cap deploy:web:disable
,并使其重新启动,请执行cap deploy:web:enable
谢谢John,请参阅我下面的评论。我尝试设置此应用程序时遇到了一些问题。apache似乎没有重定向到维护页面。我正在使用mongrel+apache运行该应用程序,在阅读了许多网站后,我仍然不确定。正如您所说,我在apache中配置了一个虚拟主机,它位于特定的端口上,出于某种原因,无论apache是否正在运行,它都会显示应用程序页面,无论我是否允许访问。因此,我显然无法将其重写到维护页面。有什么想法吗?提前谢谢
<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>