<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rel=me &#187; Merb</title>
	<atom:link href="http://rel.me/c/merb/feed/" rel="self" type="application/rss+xml" />
	<link>http://rel.me</link>
	<description>programming, objective-c, cocoa, iphone, c</description>
	<lastBuildDate>Mon, 02 Aug 2010 20:09:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Merb exception email notifier</title>
		<link>http://rel.me/2008/05/13/merb-exception-email-notifier/</link>
		<comments>http://rel.me/2008/05/13/merb-exception-email-notifier/#comments</comments>
		<pubDate>Tue, 13 May 2008 20:26:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Merb]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[exception]]></category>
		<category><![CDATA[notify]]></category>
		<category><![CDATA[sendmail]]></category>

		<guid isPermaLink="false">/2008/05/13/merb-exception-email-notifier</guid>
		<description><![CDATA[1. Handle internal_server_error in your exceptions controller. Deliver email before render. In app/controllers/exceptions.rb: class Exceptions &#60; Merb::Controller &#160; ... &#160; cattr_accessor :email_addresses &#160; def internal_server_error @exception = self.params&#91;:exception&#93; @exception_name = @exception.name.split&#40;&#34;_&#34;&#41;.map &#123;&#124;x&#124; x.capitalize&#125;.join&#40;&#34; &#34;&#41; notify_emails if Merb.env?&#40;:production&#41; render end &#160; private &#160; def notify_emails begin return if self.class.email_addresses.blank? &#160; subject = &#34;[#{@exception.class::STATUS}] #{@exception_name}: #{@exception.message}&#34; mail_body [...]]]></description>
			<content:encoded><![CDATA[<p>1. Handle internal_server_error in your exceptions controller. Deliver email before render.</p>
<p>In <em>app/controllers/exceptions.rb</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span class="kw1">class</span> Exceptions <span class="sy0">&lt;</span> <span class="re2">Merb::Controller</span>
&nbsp;
  ...
&nbsp;
  <span class="me1">cattr_accessor</span> <span class="re3">:email_addresses</span>
&nbsp;
  <span class="kw1">def</span> internal_server_error
    <span class="re1">@exception</span> = <span class="kw2">self</span>.<span class="me1">params</span><span class="br0">&#91;</span><span class="re3">:exception</span><span class="br0">&#93;</span>
    <span class="re1">@exception_name</span> = <span class="re1">@exception</span>.<span class="me1">name</span>.<span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">&quot;_&quot;</span><span class="br0">&#41;</span>.<span class="me1">map</span> <span class="br0">&#123;</span><span class="sy0">|</span>x<span class="sy0">|</span> x.<span class="me1">capitalize</span><span class="br0">&#125;</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot; &quot;</span><span class="br0">&#41;</span>
    notify_emails <span class="kw1">if</span> Merb.<span class="me1">env</span>?<span class="br0">&#40;</span><span class="re3">:production</span><span class="br0">&#41;</span>
    render
  <span class="kw1">end</span>
&nbsp;
private
&nbsp;
  <span class="kw1">def</span> notify_emails
    <span class="kw1">begin</span>      
      <span class="kw2">return</span> <span class="kw1">if</span> <span class="kw2">self</span>.<span class="kw1">class</span>.<span class="me1">email_addresses</span>.<span class="me1">blank</span>?
&nbsp;
      subject = <span class="st0">&quot;[#{@exception.class::STATUS}] #{@exception_name}: #{@exception.message}&quot;</span>
      mail_body = render<span class="br0">&#40;</span><span class="re3">:template</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;exceptions/error_email.txt&quot;</span><span class="br0">&#41;</span>
&nbsp;
      email = <span class="re2">Merb::Mailer</span>.<span class="me1">new</span><span class="br0">&#40;</span><span class="br0">&#123;</span> 
        <span class="re3">:to</span> <span class="sy0">=&gt;</span> <span class="kw2">self</span>.<span class="kw1">class</span>.<span class="me1">email_addresses</span>.<span class="me1">join</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="br0">&#41;</span>, 
        <span class="re3">:from</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;MyApp&quot;</span>, 
        <span class="re3">:subject</span> <span class="sy0">=&gt;</span> subject, 
        <span class="re3">:text</span> <span class="sy0">=&gt;</span> mail_body <span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp;
      email.<span class="me1">deliver</span>!
&nbsp;
    <span class="kw1">rescue</span> Error <span class="sy0">=&gt;</span> e
      Merb.<span class="me1">logger</span>.<span class="me1">error</span><span class="br0">&#40;</span><span class="st0">&quot;Error sending error email: #{e}&quot;</span><span class="br0">&#41;</span>
    <span class="kw1">end</span>
  <span class="kw1">end</span>
&nbsp;
&nbsp;
<span class="kw1">end</span></pre></div></div>

<p>2. Define your email template.</p>
<p>In <em>app/views/exceptions/error_email.txt.rb</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span class="sy0">&lt;%</span>= <span class="re1">@exception_name</span> <span class="sy0">%&gt;</span> (<span class="sy0">&lt;%</span>= <span class="re1">@exception</span>.<span class="kw1">class</span>::STATUS <span class="sy0">%&gt;</span>): <span class="sy0">&lt;%</span>= <span class="re1">@exception</span>.<span class="me1">message</span> <span class="sy0">%&gt;</span>
&nbsp;
URL: <span class="sy0">&lt;%</span>= <span class="st0">&quot;#{request.protocol}#{request.env[&quot;</span>HTTP_HOST<span class="st0">&quot;]}#{request.uri}&quot;</span> <span class="sy0">%&gt;</span>
Parameters: <span class="sy0">&lt;%</span>= params<span class="br0">&#91;</span><span class="re3">:original_params</span><span class="br0">&#93;</span>.<span class="me1">inspect</span> <span class="sy0">%&gt;</span>
&nbsp;
<span class="sy0">&lt;%</span> <span class="re1">@exception</span>.<span class="me1">backtrace</span>.<span class="me1">each_with_index</span> <span class="kw1">do</span> <span class="sy0">|</span>line, index<span class="sy0">|</span> <span class="sy0">%&gt;</span>
  <span class="sy0">&lt;%</span>= <span class="br0">&#40;</span>line.<span class="me1">match</span><span class="br0">&#40;</span><span class="sy0">/</span>^<span class="br0">&#40;</span><span class="br0">&#91;</span>^:<span class="br0">&#93;</span><span class="sy0">+</span><span class="br0">&#41;</span><span class="sy0">/</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="kw1">rescue</span> <span class="st0">'unknown'</span><span class="br0">&#41;</span>.<span class="kw3">sub</span><span class="br0">&#40;</span><span class="sy0">/</span>\<span class="sy0">/</span><span class="br0">&#40;</span><span class="br0">&#40;</span>opt<span class="sy0">|</span>usr<span class="br0">&#41;</span>\<span class="sy0">/</span>local\<span class="sy0">/</span>lib\<span class="sy0">/</span><span class="br0">&#40;</span>ruby\<span class="sy0">/</span><span class="br0">&#41;</span>?<span class="br0">&#40;</span>gems\<span class="sy0">/</span><span class="br0">&#41;</span>?<span class="br0">&#40;</span><span class="nu0">1.8</span>\<span class="sy0">/</span><span class="br0">&#41;</span>?<span class="br0">&#40;</span>gems\<span class="sy0">/</span><span class="br0">&#41;</span>?<span class="sy0">|</span>.<span class="sy0">+</span>\<span class="sy0">/</span>app\<span class="sy0">/</span><span class="br0">&#41;</span><span class="sy0">/</span>, <span class="st0">''</span><span class="br0">&#41;</span> <span class="sy0">%&gt;</span>:<span class="sy0">&lt;%</span>=line<span class="sy0">%&gt;</span>
<span class="sy0">&lt;%</span> <span class="kw1">end</span> <span class="sy0">%&gt;</span></pre></div></div>

<p>3. Configure the mailer. This example uses sendmail.</p>
<p>In <em>config/init.rb</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">dependency <span class="st0">&quot;merb-mailer&quot;</span>
&nbsp;
<span class="re2">Merb::BootLoader</span>.<span class="me1">after_app_loads</span> <span class="kw1">do</span>
&nbsp;
  ...
&nbsp;
  <span class="co1"># Mailer configuration</span>
  <span class="re2">Merb::Mailer</span>.<span class="me1">config</span> = <span class="br0">&#123;</span>:sendmail_path <span class="sy0">=&gt;</span> <span class="st0">&quot;/usr/sbin/sendmail&quot;</span><span class="br0">&#125;</span>
  <span class="re2">Merb::Mailer</span>.<span class="me1">delivery_method</span> = <span class="re3">:sendmail</span>
  Exceptions.<span class="me1">email_addresses</span> = <span class="br0">&#91;</span><span class="st0">&quot;my@email.com&quot;</span><span class="br0">&#93;</span>
<span class="kw1">end</span></pre></div></div>

<p>If you need something more complex, there is a <a href="http://github.com/newbamboo/merb_exceptions/tree">merb_exceptions</a> plugin from newbamboo.</p>
]]></content:encoded>
			<wfw:commentRss>http://rel.me/2008/05/13/merb-exception-email-notifier/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
