6

プロジェクトの 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自体を使用した完全なワークフローは(開発、ステージング、および本番で)機能します。リンクのホストだけが正しくありません->それが私の大きな問題です:-)..

4

2 に答える 2