Skip to content

Instantly share code, notes, and snippets.

@y-yagi y-yagi/00.md Secret
Last active Jan 16, 2019

Embed
What would you like to do?
Ginzarb 67

ローカルで試したい人はこちらをどうぞ

https://github.com/y-yagi/text_and_mailbox

npmの依存関係の解決がちょっと手間だったので、Action TextのJSはローカルに直接保持するようになっています。 (rails/railsのclone重いんで気をつけて下さい)

Action Text

概要

リッチテキストの編集・表示を行う為のフレームワーク

Rails Guide: Action Text Overview — Ruby on Rails Guides

詳細

  • テキストは専用のテーブル(action_text_rich_texts)に保存される
  • ファイルはテキストに挿入した時点でActive Storageを使用してアップロードされる
    • これ現状削除されない
    • そのため、テキストにファイル挿入 -> テキストを保存せずに終了、というような場合も挿入したファイルは保存されたままになる
      • これについてはdestroy_later(後述)が入るとやりようがありそう
  • 現状サポートしているエディターeditorはbasecamp/trixのみ

Action Mailbox

概要

メールの受信処理を行う為のフレームワーク。各種クラウドサービス(Amazon SES, Mailgun, Mandrill, SendGrid, Postmark)とMTA(Postfix、Exim、Qmail)をサポートしている(記載時点)。

Rails Guide: Action Mailbox Basics — Ruby on Rails Guides

詳細

  • クラウドサービス毎にcontrollerが準備されており、controllerでメールを受け取る -> メール保存 -> メールの内容によって各種処理を実行、という流れ
  • 受信したメールはActive Storageを使用してstorageに保存される
    • メールのmessage id、処理のstatusは専用のテーブル(action_mailbox_inbound_emails)で管理される
    • データは自動で削除される(デフォルトは30日後、Active Jobを使用)
    • 添付ファイルもそのまま保存される. (添付ファイルは別にして保存、等は無い.
  • メールのmessage id、status(未処理、処理済み、処理失敗等々)は専用のテーブル(`action_mailbox_inbound_emails)に保存される
    • ActionMailbox::InboundEmail.all でテーブルの内容を確認出来る

処理フロー

  1. 各controllerでメールを受け取る
  2. action_mailbox_inbound_emailsにデータを保存 & Active Storageを使用してメールを保存
    • statusはpending
  3. Active Jobを使用して振り分け処理用のjob(ActionMailbox::RoutingJob)を登録
    • 振り分け処理は非同期
  4. 振り分け処理を実施
    • 振り分け先が無い場合エラー(ActionMailbox::Router::RoutingError)
    • statusはbouncedに
    • status更新時に、statusが処理中(delivered or failed or bounced)になっていたら、データ削除用のjob(ActionMailbox::IncinerationJob)を登録
  5. 振り分け先のMailboxで処理を実行
    • 処理開始時にstatusがprocessingが変更
    • 処理完了時に処理結果によりstatusをdelivered、failedに変更

その他メモ

RailsのAPI docの修正について

RailsのAPI doc(https://api.rubyonrails.org/ )はzzak/sdocというgemを使って生成されている。sdocはRDoc用のgenerator。なので、RailsのAPI docはRDocのフォーマットに従って記載する必要がる。

RDocにはMarkdownをパースする機能はあるものの、現状RailsのAPI docではそれは使用されておらず、RDoc標準のフォーマットを使う必要がある。例えばMarkdownだとcodeを書くのに"`"を使用するが、Rdocだと"+"または"<tt>"タグを使用する必要がある。"+"では単語しか囲うことが出来ない。

単語とは、アルファベットの大文字および小文字とアンダースコアーの みから構成された文字列。そのため、単語の場合は"+"を、それ以外の文字が含まれる場合(スペースとか)は"<tt>"タグを、使うというような使い分けをしている。より詳細はドキュメント参照。

参考PR:

ローカルでの動作確認方法

rails/railsリポジトリのrootにあるRakefileにdoc生成用のtaskが定義されている(https://github.com/rails/rails/blob/a08827a90b5a9be79379019cf5b242bd7236d2e3/Rakefile#L46-L51 )ので、これを使用すれば、doc/にdocが生成される。HTMLファイルが生成されるので、普通にブラウザで確認出来る。

$ bundle exec rake rdoc
Parsing sources...
100% [1117/1117]  railties/lib/rails/welcome_controller.rb                                                  

Generating API format into /home/yaginuma/program/rails/master_y_yagi/rails/doc/rdoc...

  Files:      1117

  Classes:     493 ( 200 undocumented)
  Modules:     520 ( 335 undocumented)
  Constants:   371 ( 335 undocumented)
  Attributes:  437 ( 393 undocumented)
  Methods:    4448 (1660 undocumented)

  Total:      6269 (2923 undocumented)
   53.37% documented

  Elapsed: 57.7s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.