2

カスタム メーラーの使用に関するこのガイドに従って、devise のメーラーをオーバーライドしようとしています。

# config/initializers/devise.rb

config.mailer = "AccountsMailer"

本当に、すべてのメーラー アクションに対してホストを動的に設定したいと考えています。しかし、現時点では、reset_password_instructionsメソッドの基本的なオーバーライドが機能していないようです。

# app/mailers/accounts_mailer.rb

class AccountsMailer < Devise::Mailer
  # allow use of before_filter
  include AbstractController::Callbacks

  def default_url_options
    { host: 'overridden.com' }
  end

  def reset_password_instructions(record, opts={})
    raise 'overridden'
    @host = 'overridden.co'
    super
  end

end

これは、devise が私のカスタムメーラーを使用しているのかどうか疑問に思います。

# views/customers/mailer/reset_password_instructions.html.erb

<% puts "*Mail View*" %>
<% puts @host  %>
<% puts Devise.mailer %>
...

このメッセージが送信されたときの forman ログから:

mailer.1  | *Mail View*
mailer.1  |
mailer.1  | AccountsMailer
mailer.1  | Render customers/mailer/reset_password_instructions.html.erb

そのため、Devise は AccountsMailer を使用していると主張していますが、例外が発生する代わりにメッセージが送信されるため、メソッドのオーバーライドは機能していません...


関連する設定

  • レール 3.2.13
  • ルビー 1.9.3-p374
  • 考案 2.1.2
  • デバイス非同期 0.5.1
  • サイドキク 2.12.0
  • フォアマン 0.61.0
    • web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
    • デシベル: postgres -D /usr/local/var/postgres
    • redis: redis-server /usr/local/etc/redis.conf
    • メールキャッチャー: メールキャッチャー -f
    • ワーカー: bundle exec sidekiq -q high,2 -q default -e development -c 1
    • メーラー: バンドル exec sidekiq -q メーラー -e 開発 -c 1

免責事項

  • はい、フォアマン/サーバーを再起動しました
  • ホスト名はユーザーのタイプに基づいて動的であるため 、 action_mailer.default_url_options[:host]inを静的に設定することはできません(スタッフと顧客は異なるサブドメインを持っています)。environments/<env>.rb
    • action_mailer.default_url_optionsまだprocまたはblockを受け入れていません
  • 各ビューでホスト名を設定すると、よく眠れません

SO の検索では、この問題を抱えている人は他に見当たらないようでしたし、GH の問題を考案した人もいませんでした。ありがとう!

4

1 に答える 1