dunedain289
dunedain289

Reputation: 2388

Haml + ActionMailer - Rails?

I'm trying to use ActionMailer without Rails in a project, and I want to use Haml for the HTML email templates. Anyone have any luck getting this configured and initialized so that the templates will be found and rendered? I'm currently getting errors like:

ActionView::MissingTemplate: Missing template new_reg/daily_stats/full with {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:html], :locale=>[:en]} in view paths "/home/petersen/new_reg/lib/new_reg/mailers/views"

To clarify, this is ActionMailer 3.0.4

Upvotes: 3

Views: 5694

Answers (4)

Martin
Martin

Reputation: 371

require 'haml/template/plugin' in the "configure do" block together with ActionMailer::Base.view_paths = "./views/" did it for me (Sinatra)

Upvotes: 1

dunedain289
dunedain289

Reputation: 2388

Looks like the issue is that without the full Rails stack, Haml doesn't completely load, specifically the Haml::Plugin class. Adding require 'haml/template/plugin' after the normal require 'haml' line seems to solve the problems.

Upvotes: 6

Joseph
Joseph

Reputation: 9

I'm seeing a similar issue and am using ActionMailer 3.0.3. register_template_extension does not exist in ActionMailer 3.

I'm using Sinatra. I've got mailer.rb (below) in APP_ROOT/lib and the views are located in APP_ROOT/views/mailer. This sends an email with a subject, the body is blank though.

require 'action_mailer'
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.view_paths = File.dirname(__FILE__)+"/../views/"
ActionMailer::Base.smtp_settings = {
  :address              => "smtp.gmail.com",
  :port                 => 587,
  :domain               => 'exmaple.com',
  :user_name            => '[email protected]',
  :password             => 'password',
  :authentication       => 'plain',
  :enable_starttls_auto => true  }

class Mailer < ActionMailer::Base

   def new_comment_notifier(post,comment)
      @post = post
      @comment = comment

      mail(:to => "[email protected]",
           :subject => "new comment on: #{post.title}")
   end
end

Upvotes: 0

Jochem Schulenklopper
Jochem Schulenklopper

Reputation: 6914

Not necessary in Rails -- but since you're using ActionMailer without Rails -- did you specify ActionMailer::Base.register_template_extension('haml')?

Upvotes: 0

Related Questions