Techioz Blog

Rails config/production.rb ファイル内の特定のモデルにアクセスするにはどうすればよいですか?

概要

yb_notifier_email_ids テーブルに格納されている email_ids に例外メールを送信したいと考えています。以前は、email_id がproduction.rb ファイルにハードコーディングされていました。モデルを使用してメールを送信したい。しかし、構成ファイルは active_records の前にロードされるため、これを行うことはできません。

———–移行

        class CreateYbNotifierEmailIds < ActiveRecord::Migration
          def change
            create_table :yb_notifier_email_ids do |t|
              t.string :email_id

              t.timestamps null: false
            end
          end
        end
                            • 必須 - - - - - -
        config.middleware.use ExceptionNotification::Rack,
            :email => {
              :email_prefix => "[YB] ",
              :sender_address => %{"YB Notifier" <[email protected]>},
              :exception_recipients => YbNotifierEmailIds.pluck(:email_id)
            }
        end

————————私はこれを試しました:

        Rails.application.middleware.use ExceptionNotification::Rack,
              :email => {
                :email_prefix => "[YB-QA] ",
                :sender_address => %{"YB Notifier" <[email protected]>},
                :exception_recipients => defined?(YbNotifierEmailId) && YbNotifierEmailId.table_exists? ? YbNotifierEmailIds.pluck(:email_id) : %w{[email protected]}
        
            }

定義されていますか?(YbNotifierEmailId) && YbNotifierEmailId.table_exists?この条件は失敗しつつあります。

解決策

このコードを、ミドルウェアのセットアップ コードのみを含むイニシャライザー (つまり、config/initializers フォルダー内の新しいファイル) に移動することを検討しましたか?

この時点で、コード実行中のモデルにアクセスできるようになります。最後の例 (「これを試してみた:」) に従って、おそらく Rails.application.middleware.use という形式が必要になります。これは機能するはずですが、これを明示的にチェックしていません。

ミドルウェアの設定だけを含む config/initializers/Exception_notification.rb という名前のファイルのようなもの:

Rails.application.middleware.use ExceptionNotification::Rack,
  :email => {
    :email_prefix => "[YB] ",
    :sender_address => %{"YB Notifier" <[email protected]>},
    :exception_recipients => YbNotifierEmailIds.pluck(:email_id)
  }