Hi Yoram,

There are lots of different approaches, especially depending on what
your app does and how it is implemented, but I usually do something
like the following, which works for both development env (setup to re-
reload all code/templates/etc on each request) and production env
(setup to re-load code/templates/etc on app restart):

### in ./app/controllers/application.rb
  ...
  require 'time'
  ...
  MAINT_DOWN_TIME_FILE = "#{RAILS_ROOT}/tmp/down_time_#
{RAILS_ENV}.txt"
  ...
  before_filter :fetch_maint_down_time
  ...
  def fetch_maint_down_time
    @maint_down_time = nil
    begin
      s = IO.read(MAINT_DOWN_TIME_FILE)
      @maint_down_time = Time.parse(s) if s && s =~ /\d/
    rescue
      #ignore, ... meaning no scheduled down time.
    end
  end
  ...

### in ./app/views/shared/_maintenance_msg.html.erb:
<% if @maint_down_time -%>
<%   mins = (@maint_down_time - Time.now).to_i/60 -%>
<%   down_when = mins > 1 ? "in #{mins} minutes" : "imminently" -%>
<div id='sys_notice'>
  Notice: App going offline <%= h(down_when) %>. ...
</div>
<% end -%>

### in each layout, like ./app/views/layouts/testapp.html.erb:
  ...
  <%= render :partial=> 'shared/maintenance_msg' %>
  ...

Then anytime you want to warn your users for a given env about a
planned maint down_time, you just stuff a parsable datetime in the
appropriate env down time file, like:

$ echo '2009-02-28 18:20:00' > ./tmp/down_time_production.txt

which will automatically get picked up with the next request, and thus
will display the maint msg on every screen of your app like:

  ...
  Notice: App going offline in 22 minutes. ...
  ...

And then once you've completed your maintenance, you just clear out
that down time file:

$ echo '' > ./tmp/down_time_production.txt

and no maintenance msg will be displayed.

Jeff

On Feb 27, 12:27 pm, "yber...@msn.com" <yber...@msn.com> wrote:
> Hi. I have a site that is currently running in alpha mode. I have
> warned my users that it will be bouncing up and down as I deploy
> updates. That said, i'd like to broadcast a real time warning to them
> when I am about to do so. Something along the lines of:
>
> The site will be brought down for maintenance in five minutes. Save
> your work and logout to avoid losing data.
>
> Any clever suggestions on how to do this?
>
> A colleague suggested to me that I have a javascript on each page that
> polls the server for a change in status and pos up an alert. I'm
> looking for other creative suggestions...
>
> Thanks,
> Yoram
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to