Railsで、Action Mailerの callback・interceptor・observer の実行タイミングを調べてみた

RailsのAction Mailerには callback 3 Action Mailer Callbacks | Action Mailer Basics — Ruby on Rails Guides interceptor 7.1 Intercepting Emails | Action Mailer Basics — Ruby on Rails Guides observer 7.2 Observing Emails | Action Mailer Basic…

Rails + Active Adminで、Active Admin向けのテストコードを request spec で書いてみた

Active AdminのControllerに手を加えた際、テストコードがほしくなりました。 Wikiを見たところ、controller specでの実装でした。 Testing your ActiveAdmin controllers with RSpec · activeadmin/activeadmin Wiki ただ、現在では controller spec よりも…

Active AdminのControllerでは、Strong Parameters のメソッド名は permitted_params だった

Rails の Controller で Strong Parametersを使う場合、 ***_params というプライベートメソッドを定義しています。 一方、Active Admin の Controller で Strong Parameters を使う時は、デフォルトだとどんな名前になるのかを調べた時のメモです。 目次 環…

Rails + Active Adminで、Active Admin Controllerのcreate/update/destroyをオーバーライドする

Railsでは、Active Adminを使うことで管理者画面を容易に作ることができます。 Active Admin | The administration framework for Ruby on Rails そんな中、Active AdminでModelの作成・更新・削除を行うと同時に、Modelとは関係ないAPIを呼ぶ処理を追加した…

Railsで、同一のbefore_actionを別オプションで複数定義した場合、最後の定義が有効になる

Railsで before_action などのフィルタでは、 only などのオプションを追加することで対象のActionを制限できます。 8 フィルタ | Action Controller の概要 - Railsガイド そんな中、同一の before_action を別オプションで複数定義してしまったことがあっ…

Rails + 名前空間付きのActionMailerを使う場合に、件名をi18nのロケールファイルで指定してみた

Railsガイドによると、Action Mailer の件名は mailメソッドに件名が渡されなかった場合、Action Mailerは既存の訳文の利用を試みます。「<mailer_scope>.<action_name>.subject」というパターンでキーが構築されます。 4.6 Action Mailerメールの件名を訳文に置き換える | Rails 国際化</action_name></mailer_scope>…

Railsで、DeviseのMailerにControllerから値を渡す方法を調べてみた

Deviseの recoverable confirmable lockable の各モジュールでは、各種確認のためにメールを送信します。 メール送信時に使われるのが Devise::Mailer にある reset_password_instructions などのメソッドです。 https://github.com/heartcombo/devise/blob/…

Railsにて、Controllerのactionにクエリストリング付でリダイレクトする

RailsでControllerのactionにリダイレクトする時は redirect_to action: :index のように書くものの、クエリストリング付でリダイレクトする時はどうすれば良いか調べた時のメモ。 環境 Rails 6.1.4 対応 redirect_to の引数を def move_with_field redirect…

Railsで、うっかりトランザクションをネストしたところロールバックされなくなったため、requires_newとjoinableを調べてみた

Railsで、うっかりトランザクションをネストしてロールバックされなくなったので、requires_newとjoinableを調べた時のメモを残します。 なお、調査時のソースコードが長くなってしまったことから、一部のみ記載しています。 もしよろしければ、Github上のソ…

Railsにて、コントローラのアクションが長くて見通しが悪くなったため、Formオブジェクトとフィルタを使うようにした

Railsを書いている中で、コントローラのアクションが長くなってしまい、コードの見通しが悪くなったことがありました。 そのような時はFormクラスとフィルタを使うのが良いと同僚に教わったため、リファクタリングした時のメモを残します。 目次 環境 仕様に…

Rails6.1 + Devise 3.8.0 で、Deviseのデフォルトの挙動を確認してみた

Deviseを使うと認証まわりの機能をRailsに組み込むのが容易です。 ただ、「そういえばDeviseにある各モジュールのデフォルトの挙動はどんな感じだろう」と思ったため、調べた時のメモを残します。 目次 環境 検証するためのRails + Deviseアプリを作成 アプ…

Devise 4.8.0 でメールテンプレートを変更したい場合、カスタムメーラーの template_path ではなく headers_for をオーバーライドする

Rails + Deviseにて、Devise標準のメール受信確認用メールテンプレートを差し替えたいことがありました。 そこで Devise の Wiki How To: Use custom mailer · heartcombo/devise Wiki に従い、 % bin/rails g devise:views users ... create app/views/user…

Rails 6.1 + Devise 4.8.0 で、ルーティングから一部のdeviseモジュールの URI Pattern を削除する

Rails + Deviseでは、ModelにDeviseのモジュールを組み込むと、自動的に routes へ URI Pattern が追加されます。 例えば、 Rails.application.routes.draw do root to: 'home#index' devise_for :users end な routes.rb の時、DeviseのModelが class User …

Rails6.1で、セッションをキャッシュとは別のmemcachedへ保存する

Rails6.1でセッションをキャッシュとは別のmemcachedへ保存しようとした時、色々調べたことをメモに残します。 目次 環境 デフォルトのセッションストレージ Railsアプリの作成 動作確認 キャッシュの保存先を変更するための準備 フラグメントキャッシュを使…

PyCharmで、anyenv + nodenv で構築した ReactとDjango REST Frameworkの両方をデバッグしてみた

今までPyCharmでDjango REST framework(以下、DRF)のデバッグを行ったことはありました。 そんな中、以前 React + TypeScript + DRFでアプリを作りました。 ただ、ReactとDRFをPyCharmだけでデバッグしたことがなかったため、どのように設定すればデバッグで…

rake -T では表示されないRakeタスクについて

Rakefileの中に定義されているRakeタスクを確認しようと、 rake -T したところ表示されないRakeタスクがあったため、メモを残します。 環境 rake 13.0.2 原因 ヘルプに書いてありました。 rake -T では desc がないRakeタスクは表示されないとのことでした。…

Delayed Job を使って実行する処理を、RubyMineでデバッグをする

Rails + Delayed Job な環境で、Delayed Job を使って実行する処理がありました。 例えばこんな感じです。 # Delayed Job で実行 # call_heavy_api中で外部APIを呼んでいるが、その処理が重いとする Task.delay.call_heavy_api({ foo: 'bar' }) そんな中、De…

React + TypeScript + Django REST frameworkでToDo管理アプリを作ってみた

先日、大岡由佳さんの「りあクト! 第3.1版 (2020年12月26日 初版第1刷発行)」を読みました。書籍では理由や経緯などが書かれており、とてもためになりました。ありがとうございました。 りあクト! TypeScriptで始めるつらくないReact開発 第3.1版【Ⅰ. 言語…

Python + openpyxlを使って、月末日を除く五十日始まりのカレンダーを作成してみた

Pythonの標準モジュール calendar では、カレンダーを作るための便利な関数が用意されています。 calendar --- 一般的なカレンダーに関する関数群 — Python 3.9.4 ドキュメント 例えば、 monthcalendar で年月を指定すると週ごとに日付リストが得られるため…

SendGridでは、受信者メールアドレスの大文字小文字はどうなるか試してみた

メールアドレスの形式について調べる機会があったため、RFC5321(日本語訳)を見たところ、 動詞と引数の値(例えば RCPT コマンドにおける "TO:" または "to:" や拡張名キーワード)は大文字・小文字を区別されないが、メールボックスの local-part の指定が唯…

SendGridのEvent Webhookでメールを識別するため、X-SMTPAPIヘッダのUnique Argumentsを使ってみた

SendGridにはEvent Webhookがあり、メール送信のイベントをWebhookとして拾うことができます。 Event Webhook - ドキュメント | SendGrid Event Webhookでイベントを受信する - ドキュメント | SendGrid ただ、Webhookで取得できるデフォルトの項目が送信先…

お名前comの独自ドメイン + お名前メールな環境で、SendGrid の Domain Authentication によるDKIM/SPF認証を設定してみた

手元の自作アプリにて、SendGridでメールを送信するための準備として、Domain AuthenticationによるDKIM/SPF認証の設定をしたときのメモを残します。 目次 環境 調査 Domain Authentication用CNAMEレコードをどこに登録するか 設定 SendGrid にて、Domain Au…

Windows10 + aws-vault + AWS CDK + Serverless Frameworkにて、最低限の権限を持つユーザでAWS Lambda + API GatewayなAPIを作ってみた

前回の記事で、 aws-vault とAWS CLIを連携させて使えるようになりました。 Windows + aws-vaultにて、AWSのアクセスキーを保護し、 AWS CLIを AssumeRole で使えるようにしてみた - メモ的な思考的な 今回は、 aws-vault + Serverless Frameworkを連携させ…

Windows + aws-vaultにて、AWSのアクセスキーを保護し、 AWS CLIを AssumeRole で使えるようにしてみた

AWS

AWSのIAMアカウントを保護するために、 IAMユーザにはほとんど権限を与えない MFAは有効化 IAMユーザはIAMグループに所属 IAMグループに対し、特定のIAMロールへAssumeRoleするIAMポリシーを割り当て を行ったりします。 また、aws-vault により、ローカルに…

Python + PuLP + ortoolpy による組合せ最適化を使って、行事の当番表を作ってみた

最近、行事の当番表を作る機会がありました。 行事の回数や当番対象の人数がそれなりだったこと、「今日の当番は何でこの組み合わせなの?」と質問された時に「プログラムが勝手にやりました」と答えたかったことから、プログラムを作って解決することにしま…

2020年の振り返りと2021年の目標

例年通り、2020年の振り返りと2021年の目標っぽいものを書いてみます。 2020年の振り返り 2019年の振り返りと2020年の目標 - メモ的な思考的なで立てた目標を振り返ってみます。 色々な分野の素振り 2020年は公私ともにいろんな言語やフレームワークにさわり…

Raspberry Pi と python-cec で、HDMI CEC を経由してテレビの電源ON/OFFや音量調整を行う

先日Google Nest miniをお迎えしたので、家のテレビを操作してみようと思ったところ、手元のテレビでは直接の操作に対応していませんでした。 Google Nest mini以外でもテレビを操作する方法がないかを調べたところ、HDMI CECを使えばいけそうでした。 Consu…

ダンボールに入れた本を管理するDjangoアプリ「danborary」を作った

家の本棚スペースが限られているため、年末の大掃除であまり読まなくなった本をダンボールに詰めようと考えました。 ただ、何も考えずに詰めると、どの箱に何の本があるか分からなくなります。 そこで、今年さわった技術を使って、ダンボールに入れた本を管…

Djangoとyamdlにより、fixtureを使わずにYAMLとモデルを紐付ける

これは JSL(日本システム技研) Advent Calendar 2020 - Qiita の12/21分の記事です。 ちょっとしたDjangoアプリを作る中で、 モデルのデータソースはYAMLにしたい YAMLはマスタ的存在 モデル間のリレーションは存在しない YAMLを書き換えた場合、Djangoアプ…

django-cteと共通テーブル式(CTE)を用いた再帰クエリにより、階層構造を持つテーブルからデータを取得する

これは Django Advent Calendar 2020 - Qiita 兼 JSL(日本システム技研) Advent Calendar 2020 - Qiita の12/16分の記事です。 Djangoと共通テーブル式(Common Table Expression、CTE)を用いた再帰クエリを使って、階層構造を持つテーブルからデータを取得し…