ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Ruby on Railsコミュのscript/runnerにて・・

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ドはまりでイキそうなので是非わかる方教えていただければ・・
qmail+Rails1.16でモブログチック(携帯からメールで投稿する系)なプログラムを練習がてら組んでるのですが
script/runnerにてメール内容をRailsに渡す部分だけが動かず苦戦しております・・

http://wiki.rubyonrails.org/rails/pages/HowToReceiveEmailsWithActionMailer/versions/new/264

ここを参考につくってみました。

ちなみにDBの構造なんかは多少かえてあります。
Railsアプリと同じユーザーで
cat mail.txt | /usr/bin/ruby /path/to/your/script/runner 'IncomingMailHandler.receive(STDIN.read)'
とやると、完璧に動いてます。
(/path/to/yourは便宜上のファイルパスっす。mail.txtはmail本文のはいったテキストメール。)

ここまでは完璧なので該当ユーザーの.qmailに
| /usr/bin/ruby /path/to/your/script/runner 'IncomingMailHandler.receive(STDIN.read)'
と、書いてメールを送るとDBになにもはいってこない・・。

メール設定ミスかとおもい./Maildir/にかえると、ちゃんと着信している・・。

標準入力うけとって書き出すだけの簡単なperlスクリプトを書いて、.qmailに
|/usr/bin/perl test.pl
なんかを書くとちゃんとメール受け取ってることも確認できる・・。

となると、script/runnerにメール内容はわたってるけども、なんらかのエラーで実行されていないと考えるのが妥当だとおもうのですが、.qmail内の記述をそのままプロンプトで実行すると動くし・・というわけで完全にドツボっております^^;

質問1
 script/runnerでのプログラム起動時のログってどこにはいるんですかね・・。maillogもmessageもdevelopment.logもproduction.logも記述されてないんで・・。
httpd経由での実行じゃないのでそちらじゃないだろうし。

質問2
 デバッグしてる限りプログラムの間違えというより実行権限なのかなー?とかおもっているのですが、script/runnerにchmod g+sとかする必要ってあるんでしょうか・・。
この際a+s(やけくそ)とか必要なのでしょうか。。
一応やってみたけど変わりませんでした。
権限まわりでお心あたりのかたいましたらお願いします・・

以上、お忙しいところ長文よんでくれてありがとうございました!

コメント(11)

素朴な疑問なんですが、メールのログにはどの様に出力されてますでしょうか?

development.logにもproduction.logにも出力されていないと
いうことですので起動されてないと推測しました。
なのでメールログを見るのが解決への糸口になるのではないでしょうか?
さいと〜さん、回答ありがとうございます^^
いやぁ、リアルタイムでメールログは見ながらやってるのですが、Railsらしきものがないのですよね・・
qmailにスパムアサシンいれてる以外は特に変わった設定にしてないはずなんですが・・。
メール着信時にでるメールログは以下です。
なにか参考になりますでしょうか・・

Mar 14 13:31:08 lite spamd[32201]: spamd: connection from localhost.localdomain [127.0.0.1] at port 32934
Mar 14 13:31:08 lite spamd[32201]: spamd: handle_user unable to find user: '送信先のメールアドレス'
Mar 14 13:31:08 lite spamd[32201]: spamd: still running as root: user not specified with -u, not found, or set to root, falling back to nobody at /usr/bin/spamd line 1147, <GEN55> line 4.
Mar 14 13:31:08 lite spamd[32201]: spamd: processing message <20070314133039.E811.送信元のアドレス> for 送信先のメールアドレス:99
Mar 14 13:31:08 lite spamd[32201]: mkdir //.spamassassin: Permission denied at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin.pm line 1530
Mar 14 13:31:10 lite spamd[32201]: mkdir //.spamassassin: Permission denied at /usr/lib/perl5/vendor_perl/5.8.8/Mail/SpamAssassin.pm line 1530
Mar 14 13:31:10 lite spamd[32201]: locker: safe_lock: cannot create tmp lockfile //.spamassassin/auto-whitelist.lock.このサーバーのホスト名.32201 for //.spamassassin/auto-whitelist.lock: No such file or directory
Mar 14 13:31:10 lite spamd[32201]: auto-whitelist: open of auto-whitelist file failed: locker: safe_lock: cannot create tmp lockfile //.spamassassin/auto-whitelist.lock.このサーバーのホスト名.32201 for //.spamassassin/auto-whitelist.lock: No such file or directory
Mar 14 13:31:10 lite spamd[32201]: spamd: clean message (0.3/13.0) for 送信先のメールアドレス:99 in 2.2 seconds, 30503 bytes.
Mar 14 13:31:10 lite spamd[32201]: spamd: result: . 0 - ARIN,CONTENT_TYPE_PRESENT,DAIHYOU,ISO2022JP_BODY,USENISP,X_MAILER_PRESENT scantime=2.2,size=30503,user=送信先のメールアドレス,uid=99,required_score=13.0,rhost=localhost.localdomain,raddr=127.0.0.1,rport=32934,mid=<20070314133039.E811.送信元のメールアドレス>,autolearn=no
Mar 14 13:31:10 lite qmail-scanner[6790]: Clear:RC:0(64.56.177.227):SA:0(0.3/13.0): 2.242578 30475 送信元のメールアドレス 送信先のメールアドレス test50 <20070314133039.E811.送信元のメールアドレス> 1173846668.6793-0.このサーバーのホスト名:329 orig-このサーバーのホスト名11738466684936790:30475 system_center_02.gif:21546
Mar 14 13:31:10 lite spamd[32157]: prefork: child states: II
メールアドレスが[xxxx.@docomo.ne.jp]のようにアカウント部分がドットで終わる場合にActionMailerで問題があるとのことが、昨年の「スカンク日記2.0」様のブログで書かれていましたが今回のケースは該当していますか?

http://blog.ssktkr.com/?eid=297953
http://blog.ssktkr.com/?eid=308864

注:今、サイトが落ちてるかも?
( ググってキャッシュ閲覧 [ site:http://blog.ssktkr.com/ 297953 ])
例えばRailsアプリと異なるユーザーでRailsアプリを起動した場合、logファイル等への書き込み権限が必要でないかなと想像するのですが、その辺りは大丈夫でしょうか。

一度該当ユーザにsuして、Railsアプリユーザの時と同様にcat mail.txt...といった方法でのテストを行ってみてはどうでしょうか?
おつです!
皆様いろいろな情報感謝です!本当にありがとうございます

>ふたさん
メールアドレスにドットおよび特殊文字はないので、今回は該当しないようです。
しかし、携帯系のアドレスは確かに特殊ですよね。
昔perlの開発案件で携帯の変なアドレスではまりまくった記憶が・・^^;
参考サイトもありがとうございました。
みてみます!

>buchiさん
権限の問題かとおもったので、rootを含め、いろいろなユーザーで試して見ましたが結果は一様に同じ・・
SSHではいってcatからのパイプではどの権限でも正常にうごいてるのですが(ログもrails ENVに添った形で記録されてます).qmailからパイプするときのみだめ・・
ちなみに.qmailに
./Maildir/
|/usr/bin/ruby ランナースクリプトのコマンド
&自分のメアド
とかやると自分のメアドには着ませんが、Maildirには格納されてるのでランナーでこけてるのは間違いないのですが・・。
もちろんrunner行をとってると自分のアドレスに転送されてきますし、自分のアドレスをランナーの前に書けばOKです。
runnerで指定してるスクリプトって、良く考えたら何も返さない(DB格納してるだけ)なんで1とかreturnしないと駄目なんすかね。。(多分妄想)

考えうる限りもちっといろいろやってみますねーー
みなさん本当にありがとうございます。
なんとなくですが、qmailは
sh -c <command>
を渡しているようなので、
お使いのシェルとの環境違いで
ruby/railsが動かないのではないでしょうか?

http://man.qmail.jp/jman8/qmail-command.html

sh -c を使ってscript/runnerを実行してみると
何かわかるかもしれません。
>ふたさん
ありがとうございます!そこは試してなかったのでやってみました。
sh -c "cat mail.txt | /usr/bin/ruby 以下略"
やってみたところ、普通に動きました・・。
でもやっぱり.qmailに書くとだめぽ・・
なんなんでしょうねぇ・・・これ・・・
log系ファイルのパーミションは、g+wかo+wしないとやはりエラーが出ますね。

実行するRailsプロジェクト(gem等)によって使われる環境変数がさまざまですので、.qmailでエラー出力させれば解析できると思います。

| /usr/bin/ruby /path/to/your/script/runner 'IncomingMailHandler.receive(STDIN.read)' > output.txt 2> err.txt
>ふたさん
度々ありがとうございますm(_ _)m
.qmailに >で書き出せたんですねぇ。。
盲点でしたw
>の前の数字はqmail-commandのエラーコードですかね?
上記を参考にエラーコード全部吐いてみたんですが、どうやら99が実行されてる模様でした。
しか、書き出したファイルはできてるのですが内容が0バイト・・。
あと一歩な気がするのですが・・
もちっとがんばってみます!
'2>'は標準エラー出力です。
'>'や'1>'が標準出力になります。

自分の環境では問題ありませんでしが、99が返ってくるということは、qmailが実行するshの出力が返ってきているようですね。rubyの出力をとりたいので、おそらく括弧付でやれば良いのではないかと。

| (/usr/bin/ruby /path/to/your/script/runner 'IncomingMailHandler.receive(STDIN.read)' > output.txt 2> err.txt)

ちなみにruby -dで詳細なエラー出力です。
>ふたさん
あざーす!!
エラー出力できました!

エラーみると
/usr/lib/ruby/gems/1.8/gems/rmagick-1.15.4/lib/RMagick.so: libWand.so.10: cannot open shared object file: No such file or directory - /usr/lib/ruby/gems/1.8/gems/rmagick-1.15.4/lib/RMagick.so (LoadError)
なんのことはない、ImageMagicの共有ライブラリパスがとおってないよ!ってことでした。
実行ユーザーはbash_profileに
export LD_LIBRARY_PATH=/usr/local/lib
とかやってたので問題なかったんですがqmail経由で実行の場合は.bash_profileが利かないようです。盲点ですが・・
/usr/local/libにある、ImageMagick系のライブラリを/usr/libにシンボリックはって見事qmail経由で動作いたしました。

いやーーー本当に皆さんありがとうございました!
僕もなにか力になれることあったら協力しますんで!
これからもよろしくおねがいいたします!m(_ _)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Ruby on Rails 更新情報

Ruby on Railsのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング