カスタム メーラーの使用に関するこのガイドに従って、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 の問題を考案した人もいませんでした。ありがとう!