1

私は 2 つのメーラーを作成しましたが、そのうちの 1 つは Heroku の本番環境では機能していません。他のメーラーはテスト済みで動作するため、sendgrid を使用した電子メール構成が機能していることがわかります。

私は招待モデルを持っています:

class Invitation < ActiveRecord::Base
  attr_accessible :recipient_email, :sender_id, :sent_at, :token
  belongs_to :sender, :class_name => 'User'
  has_one :recipient, :class_name => 'User'
  validates_presence_of :recipient_email
  validate :recipient_is_not_registered
  validate :sender_has_invitations, :if => :sender

  before_create :generate_token
  before_create :decrement_sender_count, :if => :sender 
  after_create do |invitation|
  Mailer.delay.deliver_invitation(invitation)
  end

  private

  def recipient_is_not_registered
    errors.add :recipient_email, 'is already registered' if User.find_by_email(recipient_email)
  end

  def sender_has_invitations
    unless sender.invitation_limit > 0
      errors.add_to_base 'You have reached your limit of invitations to send.'
    end
  end

  def generate_token
    self.token = Digest::SHA1.hexdigest([Time.now, rand].join)
  end

  def decrement_sender_count
    sender.decrement! :invitation_limit
  end
end

メーラー:

class Mailer < ActionMailer::Base
  helper ActionView::Helpers::UrlHelper
 default from: "noreply@lumeo.com"

 def invitation(invite)
   @invitation = invite

   mail to: invitation.recipient_email, subject: "Invitaiton"
 end
end

テキストファイル:

You are invited to join our beta!
<%= link_to 'Sign Up', signup_url(@invite.token) %>

そしてビュー:

<div class="breadcrumbs span12 row">
    <p>
        <%= link_to "contests", contests_path %> > send invitation
    </p>
</div>
<div class="span12">
    <div class = "span6 offset2 pull-left">
        <div class="title">
            <h1>Invite Friends</h1>
        </div>
        <%= simple_form_for @invitation do |f| %>
            <fieldset class="edit well">
                <p></p>
                <p><%= f.input :recipient_email, :label => "Friend's email address" %></p>
            </fieldset>
            <div class="form-actions">
                  <%= f.submit 'Send Invite', :class => 'btn btn-primary pull-right btn-large m5' %>
            </div>
        <% end %>
    </div>
    <div class = "well pull-right span2">
        <% if current_user.invitation_limit > 0 %>
        <p>
            Welcome <%= current_user.name %>, 
            you have <%= current_user.invitation_limit %> invitations left</p>
        <% else %>
        <% end %>
    </div>

</div>

heroku のログ ファイルは次のとおりです。

heroku[router]: GET www.lumeo.com/invitations/new dyno=web.1 queue=0 wait=0ms service=85ms status=200 bytes=4922
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] Class#invitation failed with ArgumentError: wrong number of arguments (0 for 1) - 0 failed attempts
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] Class#invitation failed with ArgumentError: wrong number of arguments (0 for 1) - 1 failed attempts
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] 2 jobs processed at 4.3239 j/s, 2 failed ...
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] Class#invitation failed with ArgumentError: wrong number of arguments (0 for 1) - 2 failed attempts
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] Class#invitation failed with ArgumentError: wrong number of arguments (0 for 1) - 3 failed attempts
app[worker.1]: [Worker(host:881b0507-883f-43b1-b3aa-7cfddc9c17fa pid:2)] 2 jobs processed at 11.4575 j/s, 2 failed ...

app[postgres]: [13913-1] [WHITE] LOG: チェックポイント開始: 時間 app[postgres]: [13914-1] [WHITE] LOG: チェックポイント完了: 0 バッファー (0.0%) を書き込みました。0 個のトランザクション ログ ファイルが追加され、0 個が削除され、1 個がリサイクルされました。書き込み = 0.000 秒、同期 = 0.000 秒、合計 = 0.007 秒; 同期ファイル = 0、最長 = 0.000 秒、平均 = 0.000 秒

ご提案がありましたら、お知らせください。前もって感謝します。ブライアン

4

1 に答える 1

0

質問への回答は、他の誰かにとって役立つ場合もあれば、そうでない場合もあります。2 つのメーラー クラスを定義しました。1 つは mailers/mailer.rb に、もう 1 つは models/mailer.rb にありました。

Rails 2.0 は明らかにメーラー ディレクトリを使用していませんでした。私はこれを設定する方法に関する情報について、2 つの異なる情報源をたどっていました。他の誰かがこの同じ問題を抱えている可能性があるので、そこにあります。models/mailer.rb ファイルを削除しました

于 2012-09-30T05:53:14.850 に答える