Redmine・メールによるチケット登録(IMAPサーバGmailで)


RedmineをiPhoneで使いたくてAWSのEC2にインストールしてみた。その後メールによるチケット登録を試みた。公式サイトには3パターンの設定が示されている。その中からIMAPサーバであるgmailからの受信という簡単そうな設定を選んだ。しかしこれがハマった。

・現象1:IMAPサーバから受信はしているがチケットが登録されない(空振り)
 ・原因:Redmineサーバで実行するrakeコマンドの記述誤り
  ・プロジェクト識別子を書くべきところプロジェクト名称を書いていた。

・現象2:IMAPサーバから受信するcgiがソースで表示される。
 ・原因:Appatchのhttpd.confの記述誤り
  ・Optionsに必要な値を列挙すべきところExecCGIしか記述しなかった。


以下問題解決の手法も含め状況と対処の記録です。
似たような状況の人の参考となれば幸いです。

現象1:IMAPサーバから受信はしているがチケットが登録されない(空振り)

設定はこれらのページを参考にしました。

公式Redmine日本語サイト「メールによるチケット登録」

MyRedmine メールによるチケット登録 - メールを送る

RedmineはBitnamiを使用。必要なPATHはインストールパスにあるuse_redmineを実行すれば簡単にexport。そしてrakeを実行。

$ ./use_redmine

$ ./bin/rake --trace -f ./Rakefile redmine:email:receive_imap RAILS_ENV="production" host=imap.gmail.com port=993 ssl=1 project=[xxxxxxxxxxxx]  username=[xxxxxxxx@gmail.com] password=[xxxxxxxx] folder=INBOX move_on_failure=[失敗した時のラベル] allow_override=project 

・--trace:rakeの実行状況を表示。
・-f:Rakefileはインストールパスにあるものを指定。
・folder:Gmailは受信箱=INBOXなので省略しても良さげ。
・move_on_failure:何らかの原因でチケット登録出来なかった時にメールを移す先のフォルダを指定。Gmailではラベル。
・allow_override:メール本文で上書きしていい属性を指定可能。

<--traceオプションで何が起きているか知る>


上記のrakeコマンドでgmailの受信フォルダからメールを拾ってくるはずが、何もチケットとして登録されず[失敗した時のラベル]に移されるだけでした。
何が起こっているのでしょうか。rakeの引数である--traceオプションで表示されるメッセージは以下でした。

** Invoke redmine:email:receive_imap (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute redmine:email:receive_imap 

特に異常は無さそうです。では受信したあとRedmine側では何が起きているのでしょうか。Redmineのログを見てみます。

<Redmineで何が起きているかログを監視する>


BitnamiのRedmineログは以下にある。
~/redmine/apps/redmine/htdocs/log/production.log
これをtailコマンドで監視してみる。

$ tail -f production.log

このオプションはファイルにデータが追加されるとほぼリアルタイムに追加された行を表示する。これを仕掛けておいてrakeコマンドを実行してみた。すると以下のメッセージが。

Connecting to database specified by database.yml
OpenIdAuthentication.store is nil. Using in-memory store.
Creating scope :system. Overwriting existing method Enumeration.system.
Creating scope :sorted. Overwriting existing method User.sorted.
MailHandler: missing information from [メールの送信者]: Unable to determine target project
MailHandler: missing information from [メールの送信者]: Unable to determine target project
MailHandler: missing information from [メールの送信者]: Unable to determine target project
MailHandler: missing information from [メールの送信者]: Unable to determine target project

最後の4行。メールハンドラ。メールを受信したがターゲットとするプロジェクトが不明だとか。プロジェクトの指定方法が悪いらしい。

<rakeコマンドの引数を理解していなかった>


もう一度rakeコマンドのオプション指定を下記のサイトで確認してみた。


↑ちゃんと書いてあったではないか。”プロジェクト識別子 ※注意: プロジェクト名ではない
プロジェクトの識別子は”設定タブ”の”情報タブ”にある。というか自分で設定していた。
これでGmailのアドレスへメール送るとRedmineにチケット登録されるという流れができた。

現象2:IMAPサーバから受信するcgiがソースで表示される

IMAPサーバから受信する部分を自動化しようとすると普通はcronに頼ることになる。しかしRedmineもIMAPサーバも自前のサーバならまだしも、どちらもインターネット上だしRedmineをAWSに立てたとなると課金が気になるのでなるべく無駄な処理・トラフィックは避けたい。
ということでどうせ試験的に自分しか使わないのならcgiにしてモバイル側から必要な時にキックすればいいかなと。

Bitnamiのデフォルトのcgiパスは以下。別のパスでもいいけど。


~/redmine/apache2/cgi-bin

ここにcgi置いて実行権限他設定。chmod +755 xxx.cgi
そしてブラウザから起動してみたが期待に反してcgiのソースが表示された。
拡張子.cgiがcgiと認識されておらずテキストファイルと認識されている。
ということで以下のサイトを参考にApacheのhttpd.confを修正。



<httpd.confを修正する>


Bitnamiのデフォルトのhttpd.confは以下のパス。

~/redmine/apache2/conf/httpd.conf

以下がコメントアウトとなっているので解除。

AddHandler cgi-script .cgi

しかしこれでもまだcgiはソースが表示されるだけ。

<再度httpd.confを修正する>

どうもcgiのディレクトリに対する設定が足りないらしい。

Options ExecCGI

Require all granted

これでもだめ。ソースが表示されるということはファイルに対するアクセス権限は通っているということなので、どうやらOptionsの指定のようだった。

<httpd.confの設定の仕方を理解していなかった>

このOptions、どうやら+と付けると既存の設定に追加されるらしい。


Options +ExecCGI

Require all granted

これで成功。結局設定値の意味を理解していなかったのだ。参考にしたのは以下のサイト。

特定のディレクトリでCGIを実行する(Option, AddHandler)



これで以下の流れが可能となった。

・Gmailにチケット登録メール送信
・iPhoneのホーム画面にcgiのURLを登録したアイコンをタップ
 →Gmailからメール受信しRedmineへチケット登録
・Redmineクライアントアプリでチケット確認

以上

0 件のコメント:

コメントを投稿