プロジェクトの 1 つで、実行時に ActionMailer::Base.default_url_options = {:host => host} を変更すると問題が発生します。
セットアップ: バックエンドで同じ Rails-Application を使用している複数のサブドメインがあります。Sidekiq キューを介して Devise メールをユーザーに送信したいと考えています。Devise メール (確認、パスワードのリセット) にはリンクが含まれており、これらのリンクには特定のサブドメインが正しい必要があります。
私の環境
rails (4.2.0)
sidekiq (3.3.1)
devise (3.4.1)
devise-async (0.9.0)
application_controller に before_action があります
class ApplicationController < ActionController::Base
before_action :set_action_mailer_default_url_options
private
def set_action_mailer_default_url_options
host = "my-logic-to-get-the-correct-host"
ActionMailer::Base.default_url_options = {:host => host}
end
end
パスワードをリセットしたい場合は、環境ファイルで指定したデフォルトの URL オプションを常に取得します。環境から default_url_options を削除すると、sidekiq ログにデフォルトの Devise エラーが記録されます。
ActionView::Template::Error: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
ホストは常にコントローラに正しく設定されています。私はすでにそれをデバッグしました。ホストがsidekiqに渡されていないようです..これを修正する方法はありますか?
サブドメインをどこかに保存できません。ユーザーは異なるサブドメインから電子メールをトリガーでき、常に同じとは限らないためです。特定のメールを送信するためにどのホストを使用する必要があるかを Devise に伝える方法が必要です。Devise メーラーをオーバーライドして、ホストなどを渡すことはできますか?
私の場合、次の解決策は不可能です: sidekiq を使用している場合の Rails アクションメーラーの動的ドメイン名
ところで:devise、devise-async、sidekiq自体を使用した完全なワークフローは(開発、ステージング、および本番で)機能します。リンクのホストだけが正しくありません->それが私の大きな問題です:-)..