概要

エイリアスとパイプ「|」を使って、特定のRails処理を起動する。
Rails起動には「rails runner」というものを使用する。

※パイプに渡すコマンドで直接runnerを起動することもできるが、rvm等を使っていると、Rubyの実行環境を事前に整えるコマンドが必要になるので、スクリプトを作ってそれを実行するようにしたほうが便利っぽい。

サンプル

※参考サイト1、2を参照

エイリアス設定

# 追記
$ sudo vi /etc/aliases
welcome: '| /path/to/app/script/welcome'

# 有効化
$ sudo postalias /etc/aliases
$ sudo newaliases

スクリプト設定
※後でちゃんと書く

$ vi /path/to/app/script/welcome
#! /usr/bin/env bash
# 環境パス設定
...

# 実行
rails runner -e production WelcomeMail STDIN.read    # => STDIN.read はメールの内容を読み込む為に必要

実行権限
aliases は postfixユーザとかで実施される模様。

$ chmod 777 /path/to/app/script/welcome

Rails側の処理

# coding: utf-8
class WelcomeMail < ActionMailer::Base
  default from: "hoge@fuga.net"
  def receive(email)
    from = email.from[0]
    if email.has_attachments?
      # ファイルが添付さている
      attachment = email.attachments[0]
    end
  end
end

参考資料

  1. Rails3でメール受信(postfix + rvm + bundler + rails runner)
  2. rvm + cron + bundler + script/runner - 夜の Discovery
  3. Postfixでメールを受信した際にRailsで何かしらのコマンドを実行する | デジタネイティブ
0