Почему ActionMailer не доставляет мой объект mongoid? - PullRequest
1 голос
/ 08 февраля 2012

Задача

У меня есть приложение, в котором можно обещать подарок. Как только залог будет сделан, электронное подтверждение должно быть отправлено залогодателю. Сервер выдает 500 Internal Server Error при попытке отправки почты.

Контекст:

  • Ruby on Rails 3.2.0
  • Actionmailer 3.2.0
  • Монгоид 2.4.3
  • Тонкий 1.3.1

Я использовал Actionmailer в предыдущих приложениях, но я впервые работаю с Mongoid.

код

class Pledge
  include Mongoid::Document
  field :name, :type => String
  field :email, :type => String
  field :amount, :type => Float

  embedded_in :gift
end 


class PledgesController < ApplicationController
  def create
    @gift = Gift.find(params[:gift_id])
    @pledge = @gift.pledges.new(params[:pledge])

    respond_to do |format|
      if @pledge.save
        PledgeMailer.pledge_confirmation(@pledge).deliver
        format.html { redirect_to :root, notice: 'Pledge successfully created.' }
      else
        ...
      end
    end
  end
...
end


class PledgeMailer < ActionMailer::Base
  default :from => "no-reply@mail.com"

  def pledge_confirmation(pledge)
    @pledge = pledge
    mail(:to => pledge.email, :subject => "Thanks - pledge confirmation")
  end
end

Вход

Итак, скажем Sam Andreas на sacrificial.address@gmail.com обещали $42.42 для подарка 4f2695009f5b7f3464000001.

Это с радостью сохраняет в Mongodb и перенаправляет на :root. При добавлении звонка на PledgeMailer получаем:

Started POST "/gifts/4f2695009f5b7f3464000001/pledges" for 127.0.0.1 at 2012-02-08 14:13:21 +1100
Processing by PledgesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"EwgOwALSb8uUsT4Ow1+RBvAEihXKXoqKS1JA9ZfpUfg=", 
    "pledge"=>{"name"=>"Sam Andreas", "email"=>"sacrificial.address@gmail.com", "amount"=>"42.42"}, 
    "commit"=>"Create Pledge", "gift_id"=>"4f2695009f5b7f3464000001"}
  MONGODB danspressie_development['gifts'].find({:_id=>BSON::ObjectId('4f2695009f5b7f3464000001')}).limit(-1).sort([[:_id, :asc]])
  MONGODB danspressie_development['gifts'].update({"_id"=>BSON::ObjectId('4f2695009f5b7f3464000001')}, {"$push"=>{"pledges"=>{"_id"=>BSON::ObjectId('4f31e8519f5b7f41d1000002'), "name"=>"Sam Andreas", "email"=>"sacrificial.address@gmail.com", "amount"=>42.42}}})
  Completed 500 Internal Server Error in 11ms

SyntaxError (/Users/daniel/Dropbox/dev/src/danspressie/app/mailers/pledge_mailer.rb:4: invalid multibyte char (US-ASCII)
/Users/daniel/Dropbox/dev/src/danspressie/app/mailers/pledge_mailer.rb:4: syntax error, unexpected $end, expecting keyword_end 
  def pledge_confirmation(pledge)
 ^):
  app/controllers/pledges_controller.rb:8:in `block in create'
  app/controllers/pledges_controller.rb:6:in `create'

Трудно изо всех сил, но не вижу, где ошибка pledge_confirmation.

У вас есть указатели? :)

1 Ответ

2 голосов
/ 08 февраля 2012

Ваш код выглядит нормально.Ошибка жалуется на «недопустимый многобайтовый символ (US-ASCII)».Вам лучше воссоздать pledge_mailer.rb с нуля и сохранить его с кодировкой UTF-8 вместо US-ASCII.

...