production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

Rails6で追加されたAction Mailboxをルーティングから消す方法

概要

Rails6導入されたAction Mailboxは受信したメールをコントローラに似たメールボックスにルーティングし、Railsで処理できるようにする機能です。
非常に便利な機能ですし、Railsのプロジェクトを作り始めた直後から使い始めることが可能です。
rails new直後にrake routesでルーティングを確認すると下記のような結果が得られます。

$ bundle exec rake routes
        rails_mandrill_inbound_emails POST   /rails/action_mailbox/mandrill/inbound_emails(.:format)                                  action_mailbox/ingresses/mandrill/inbound_emails#create
        rails_postmark_inbound_emails POST   /rails/action_mailbox/postmark/inbound_emails(.:format)                                  action_mailbox/ingresses/postmark/inbound_emails#create
           rails_relay_inbound_emails POST   /rails/action_mailbox/relay/inbound_emails(.:format)                                     action_mailbox/ingresses/relay/inbound_emails#create
        rails_sendgrid_inbound_emails POST   /rails/action_mailbox/sendgrid/inbound_emails(.:format)                                  action_mailbox/ingresses/sendgrid/inbound_emails#create
         rails_mailgun_inbound_emails POST   /rails/action_mailbox/mailgun/inbound_emails/mime(.:format)                              action_mailbox/ingresses/mailgun/inbound_emails#create
       rails_conductor_inbound_emails GET    /rails/conductor/action_mailbox/inbound_emails(.:format)                                 rails/conductor/action_mailbox/inbound_emails#index
                                      POST   /rails/conductor/action_mailbox/inbound_emails(.:format)                                 rails/conductor/action_mailbox/inbound_emails#create
        rails_conductor_inbound_email GET    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#show
                                      PATCH  /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#update
                                      PUT    /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#update
                                      DELETE /rails/conductor/action_mailbox/inbound_emails/:id(.:format)                             rails/conductor/action_mailbox/inbound_emails#destroy
rails_conductor_inbound_email_reroute POST   /rails/conductor/action_mailbox/:inbound_email_id/reroute(.:format)                      rails/conductor/action_mailbox/reroutes#create
                   rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
            rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
                   rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
            update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
                 rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

しかし、受信したメールを処理する必要がないシステムにとっては不要なものになります。
今回は、このデフォルトで設定されたRails6で追加されたAction Mailboxをルーティングから消す方法を書きます。
併せて、/rails/active_storage/**を消す方法も書きます。

config/application.rb の変更

config/application.rbを開くと、色々な物がrequireされていることがわかります。
このなかから以下を消します。

  • active_storage/engine
  • action_mailbox/engine
  • action_text/engine
--- a/config/application.rb
+++ b/config/application.rb
@@ -5,11 +5,11 @@ require "rails"
 require "active_model/railtie"
 require "active_job/railtie"
 require "active_record/railtie"
-require "active_storage/engine"
+#require "active_storage/engine"
 require "action_controller/railtie"
 require "action_mailer/railtie"
-require "action_mailbox/engine"
-require "action_text/engine"
+#require "action_mailbox/engine"
+#require "action_text/engine"
 require "action_view/railtie"
 require "action_cable/engine"
 # require "sprockets/railtie"

上記の修正で、action_mailboxのルーティング設定は消えます。

config/environments/配下のファイルの修正

次に、config/environments/配下のファイルを修正します。
各環境の設定ファイルにconfig.active_storage.service = :localといった記述があるため、それを削除します。

config/environments/development.rbを例にすると以下の修正を加えます。

--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -26,7 +26,7 @@ Rails.application.configure do
   end
 
   # Store uploaded files on the local file system (see config/storage.yml for options).
-  config.active_storage.service = :local
+  # config.active_storage.service = :local

なぜこれを行う必要があるかというと、config/application.rbactive_storage/engineを削除したため、
config.active_storageを解決できなくなるためです。

まとめ

以上の変更を行い、再度rake routesを実行します。

$ be rake routes
You don't have any routes defined!

Please add some routes in config/routes.rb.

For more information about routes, see the Rails guide: https://guides.rubyonrails.org/routing.html.

ルーティングからaction_mailboxactive_storageが消えましたね!