打印

HowtoSendEmailWhenRailsThrowsAnException

HowtoSendEmailWhenRailsThrowsAnException

HowtoSendEmailWhenRailsThrowsAnException

把下面的代码加入application.rb:
protected 

 def log_error(exception)
  super(exception)

  begin
  ErrorMailer.deliver_snapshot(
   exception,
   clean_backtrace(exception),
   @session.instance_variable_get("@data"),
   @params,
   @request.env)
  rescue => e
  logger.error(e)
  end
 end

如果你坚持使用model的话, 请插入:
    def local_request?
  false
 end
Mailer的例子, 在命令行输入:script/generate mailer ErrorMailer, 然后编辑:app/models/error_mailer.rb

class ErrorMailer < ActionMailer::Base

 def snapshot(exception, trace, session, params, env, sent_on = Time.now)

  # [nazgum]: Setting the content-type like this did not work for me
  #@headers["Content-Type"] = "text/html"

  # Setting the content-type like this does:
  content_type "text/html"

  @recipients   = 'target @ domain.tld'
  @from     = 'Error Mailer <error @ domain.tld>'
  @subject    = "[Error] exception in #{env['REQUEST_URI']}"
  @sent_on    = sent_on
  @body["exception"] = exception
  @body["trace"]  = trace
  @body["session"]  = session
  @body["params"]  = params
  @body["env"]   = env
 end

end

改变app/views/error_mailer/snapshot.rhtml:

<style>
<!--

* {  font-size:  9pt;  font-family:  verdana, helvetica, arial, sans-serif; line-height: 1.7em; }
p { margin: 0 }
-->
</style>
<h2>Error report from <%= Time.now %></h2>

<table border="0">
<tr><td>Message</td><td><%= @exception.message %></td></tr>
<tr><td>Location</td><td><%= @env['REQUEST_URI'] %></td></tr>
<tr><td>Action</td><td><%= @params.delete('action') %></td></tr>
<tr><td>Controller</td><td><%= @params.delete('controller') %></td></tr>
<tr><td>Query</td><td><%= @env['QUERY_STRING'] %></td></tr>
<tr><td>Method</td><td><%= @env['REQUEST_METHOD'] %></td></tr>
<tr><td>SSL</td><td><%= @env['SERVER_PORT'].to_i == 443 ? "true" : "false" %></td></tr>
<tr><td>Agent</td><td><%= @env['HTTP_USER_AGENT'] %></td></tr>
<% if @session['user'] -%>
<tr><td>User id</td><td><%= @session['user'].id %></td></tr>
<tr><td>User name</td><td><%= @session['user'].name %></td></tr>
<tr><td>User email</td><td><%= @session['user'].email %></td></tr>
<tr><td>Registered</td><td><%= @session['user'].created_at %></td></tr>
<% end -%>
</table>

<h3>Backtrace</h3>
<div><%= @trace.to_a.join("</p>\n<p>") -%></div>

<h3>Params</h3>
<hr/>
<% for key, val in @params -%>
<p><b><%= key %></b></p>
<p><%= val.to_yaml.to_a.join("</p>\n<p>  ") %></p>
<% end if @params -%>

<h3>Session</h3>
<hr/>
<% for key, val in @session -%>
<p><b><%= key %></b></p>
<p><%= val.to_yaml.to_a.join("</p>\n<p>  ") %></p>
<% end if @session -%>

<h3>Environment</h3>
<hr/>
<table border="0">
<% for key, val in @env -%>
<tr>
 <td>
  <small><b><%= key %></b></small>

 </td>
 <td>
  <small><%= val %></small>
 </td>
</tr>
<% end if @env -%>
</table>

Thanks to http://wiki.rubyonphp?name=rails" onclick="tagshow(event)" class="t_tag">rails.com/rail ... lsThrowsAnException and Tom Davies
本帖最近评分记录
  • drive2me R币 +10 谢谢,他们已经在学了,呵呵! 2008-6-4 14:59
  • 5swords R币 +8 谢谢介绍 2008-6-4 08:40

TOP

谢谢! 学到了一小点. 不过整个程序因为没用过MAILER, 不是很明白. 以后再学.
a = [[1,2], [2,3]]
a.each {|i,j | p i + j} if a
=>
for i,j in a
 p i+j
end if a

如果a是nil, 那么
for i,j in a
 p i+j
end
会出错.
本帖最近评分记录
  • drive2me R币 +10 学的好快! 2008-6-4 14:59

TOP

2008-11-18 17:27 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.57