休日の朝から失礼します(^_^;


sakura internetのスタンダードで;
http://www.t-doi.org/linux/autopic.html
を動かそうとしました。

※.fowardでなく.mailfilterを適用;
http://faq.sakuratan.com/wiki/wiki.cgi?%A5%E1%A1%BC%A5%EB#i19

※mailparse.rbを変更;
 ・#!/usr/bin/ruby → #!/usr/local/bin/ruby
 ・4行目にrequire 'rubygems'を追加(tmailをgem installしたため)
 ・decode64 → Base64.decode64

※.procmailrcを変更;
 ・Maildir →MailBox

テスト(% ruby mailparse.rb < SOMETHINGMAIL.txt)だとOKなのですが、実際のメールトリガーだとNGで、下記ログ(LOGFILE=$MAILDIR/from)が出ます;

/home/MyAccount/bin/mailparse.rb:3:in `require': no such file to load -- rubygems (LoadError)
from /home/MyAccount/bin/mailparse.rb:4
procmail: Error while writing to "/home/MyAccount/bin/mailparse.rb"

具体的な対処方法を教えて下さいm(__)m

回答の条件
  • 1人2回まで
  • 登録:2008/02/24 08:08:06
  • 終了:2008/02/27 12:16:07

ベストアンサー

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222008/02/24 12:19:41

ポイント100pt

こんにちは。

同じ環境を試したわけではないので、はずしてたらすみません。

エラーからすると、gemでインストールしたライブラリが読めないということなんだと思います。

直接関係ないですが、次のリンクの4と同じ状態という感じでしょうか。

http://rails.netlab.jp/rails/published/rails_on_sarge_gem

ですので、方法として、Rubyのライブラリパスを通してあげればよいと思います。

コマンドラインで直接実行した際とは環境変数が異なるのでしょう。きっと。

ライブラリパスの通し方は、以下のURLを参考にしてください。

http://www.pen-chan.jp/net/set/ruby-tips.html

mailfilter内で起動している場所、もしくは、ここではシェルスクリプトの起動だけであれば、そのシェルスクリプト内で、

ruby -I <gemライブラリのパス> mailparse.rb 

のような感じで-Iで指定してあげればよいのではないでしょうか?

gemライブラリのパスは、コマンドラインでは動作するとのことなので、コマンドラインで、

echo $RUBY_LIB

とでも、すれば確認できるでしょう。


何かの参考になれば。

id:gets_itai

ご丁寧にありがとうございます。

いただいた情報を元に、諸々試していますが、まだ解決できません。

・・・今夜も永くなりそうです。。。

2008/02/24 22:47:56

その他の回答(1件)

id:t_shiono No.1

t_shiono回答回数256ベストアンサー獲得回数222008/02/24 12:19:41ここでベストアンサー

ポイント100pt

こんにちは。

同じ環境を試したわけではないので、はずしてたらすみません。

エラーからすると、gemでインストールしたライブラリが読めないということなんだと思います。

直接関係ないですが、次のリンクの4と同じ状態という感じでしょうか。

http://rails.netlab.jp/rails/published/rails_on_sarge_gem

ですので、方法として、Rubyのライブラリパスを通してあげればよいと思います。

コマンドラインで直接実行した際とは環境変数が異なるのでしょう。きっと。

ライブラリパスの通し方は、以下のURLを参考にしてください。

http://www.pen-chan.jp/net/set/ruby-tips.html

mailfilter内で起動している場所、もしくは、ここではシェルスクリプトの起動だけであれば、そのシェルスクリプト内で、

ruby -I <gemライブラリのパス> mailparse.rb 

のような感じで-Iで指定してあげればよいのではないでしょうか?

gemライブラリのパスは、コマンドラインでは動作するとのことなので、コマンドラインで、

echo $RUBY_LIB

とでも、すれば確認できるでしょう。


何かの参考になれば。

id:gets_itai

ご丁寧にありがとうございます。

いただいた情報を元に、諸々試していますが、まだ解決できません。

・・・今夜も永くなりそうです。。。

2008/02/24 22:47:56
id:ffmpeg No.2

ffmpeg回答回数1202ベストアンサー獲得回数92008/02/24 12:43:43

id:gets_itai

もう少し具体的な情報をいただけると、さらに嬉しゅうございます。

2008/02/24 22:48:54
  • id:gets_itai
    .mailfilter から、.procmailrcを経由させるのを止め、
    .mailfilter から直接スクリプトを起動させることにしました。

    でも、やっぱりうまくいきません。
    各種設定は、以下の通りにしています;

    .mailfilterには;
    cc "| ruby -I /home/*****/lib/ruby/site_ruby/1.8/ /home/*****/bin/mailparse.rb"

    と記述し、

    mailparse.rbのシェバングには;
    #!/usr/local/bin/ruby -I /home/******/lib/ruby/site_ruby/1.8


    .cshrcには;
    set path = (/sbin…(略)…/usr/X11R6/bin $HOME/bin $HOME/lib/ruby/gem/bin)
    setenv RUBYLIB $HOME/lib/ruby/site_ruby/1.8:$HOME/lib/ruby
    setenv GEM_HOME $HOME/lib/ruby/gem

    を指定しています。


    何卒、お知恵を拝借させてください!


  • id:gets_itai
    もう一件、情報です;

    maildropをコマンドで実行した場合も、問題なくスクリプトが動作し、思った通りの結果が得られました。
    (↓下記がそのログです↓)

    %maildrop -V 9 .mailfilter < testmail.txt
    Message start at 0 bytes, envelope sender=*****
    maildrop: Attempting .mailfilter
    Tokenized logfile
    Tokenized string: "$HOME/maildrop.log"
    Tokenized ;
    Tokenized cc
    Tokenized string: "| ruby -I /home/*****/lib/ruby/site_ruby/1.8 /home/*****/bin/mailparse.rb"
    Tokenized ;
    Tokenized ;
    Tokenized ;
    Tokenized ;
    Tokenized ;
    Tokenized ;
    Tokenized eof
    .mailfilter(1): Opening logfile /home/*****/maildrop.log
    maildrop: Delivering to | ruby -I /home/*****/lib/ruby/site_ruby/1.8 /home/*****/bin/mailparse.rb
    maildrop: Delivery complete.
    maildrop: Delivering to /var/mail/*****
    maildrop: Unable to open mailbox.


  • id:t_shiono
    お疲れ様です。

    やはりメールによるトリガーのときの環境とことなることが原因のようですね。
    まずは、何が違うかを、例えばですが、トリガーの処理の中で、env > 適当なファイルなどとして、実行しているときの環境を確認してみてはいかがでしょうか?

    その上で、不足分を設定するようにmaildropの処理を書き換えてみるとかでしょうか。
  • id:gets_itai
    t_shionoさん
    お疲れ様です

    今日は、雨の中、飲みに行ってしまい、
    夜も遅くなってしまいました。

    さあ、いまから頑張ります!

    さて、envを出してみました;

    HOSTNAME=*****.sakura.ne.jp
    SIZE=17508
    DEFAULT=/home/*****/MailBox/postmaster/maildir
    SENDMAIL=/usr/sbin/sendmail -oi
    HOME=/home/*****/MailBox/postmaster
    LOCKREFRESH=15
    LOGNAME=postmaster@*****.sakura.ne.jp
    LOCKSLEEP=5
    PATH=/bin:/usr/bin:/usr/local/bin
    FROM=*****@gmail.com
    SHELL=/bin/sh
    MAILFILTER=.mailfilter
    UMASK=077
    MAILDIRQUOTA=
    LINES=269
    LOCKTIMEOUT=60
    LOCKEXT=.lock

    何かヒントなどございましたら、教えて下さい。

    よろしくお願いいたします >皆様。


  • id:t_shiono
    シェルログインをしてコマンドラインからenvを実行した場合と、メールをトリガーにした処理の中で実行した場合とで、envの結果は同じでした?
  • id:gets_itai
    上にあるのは、メールトリガーの際のenvです。

    コマンドラインからスクリプトを実行した際は;

    GEM_HOME=/home/*****/lib/ruby/gem
    HOME=/home/*****
    SENDMAIL=/usr/sbin/sendmail -oi
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/u\
    sr/X11R6/bin:/home/*****/bin:/home/*****/ruby/bin:/home/*****/lib/ruby/gem/b\
    RUBYLIB=/home/*****/lib/ruby/site_ruby/1.8:/home/*****/lib/
    MAILFILTER=.mailfilter
    GROUP=users
    SHELL=/bin/csh

    となります。

    やはり、メールトリガーの際は、PATHやRUBYLIB、GEM_HOMEの情報が欠落しているようです。

    .mailfilterとmailfilter.rbのシェバングに、諸々足してみた方がよいということですよね。

  • id:gets_itai
    ▼.mailfilterを;
    cc "| ruby -I /home/*****/lib/ruby/site_ruby/1.8:/home/*****/lib/ /home/*****/bin/mailparse.rb"

    ▼maildrop.rb(上のコメントでmailfilter.rbと書いてあるのは誤りでした)のシェバングを;
    #!/usr/local/bin/ruby -I /home/*****/lib/ruby/site_ruby/1.8:/home/*****/lib/

    としてみたんですが、まだうまくいきません・・・


  • id:t_shiono
    原因はたぶん、それでしょうね。

    mailfilterにパスを色々書くのは煩雑になるかと思うので、

    cc "| /home/*****/bin/mailparse.sh"

    などとして、

    /home/*****/bin/mailparse.shの中身を

    #!/bin/sh
    export RUBYLIB=/home/*****/lib/ruby/site_ruby/1.8:/home/*****/lib/
    export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/u\
    sr/X11R6/bin:/home/*****/bin:/home/*****/ruby/bin:/home/*****/lib/ruby/gem/b\
    ruby /home/*****/bin/mailparse.rb

    みたいなことにすれば、すっきりするかと思います。

    あとは、上記では省略してますが、その他のもパスなどもちゃんと設定して、シェルログイン時にPATHやRUBYLIBを空にしてから、実行させて動作すれば、間違いないかと思います。
  • id:gets_itai
    t_shionoさま

    ありがとうございます。
    まだうまくいきませんが、解決の方向性はつかめましたので、
    明日、頭がクリアな状態で作業して、この件クローズさせたい!
    と思います。

    それでは、お休みなさいませ。
  • id:gets_itai
    t_shionoさま!

    シェルスクリプトに、PATH、RUBYLIB、GEM_HOMEを全て明示したところ、メールからのトリガーでも思った通りの処理ができました!!

    ありがとうございました!!!

    自分、UNIXのユーザの考え方とかを全然理解できていなかったんですが、今回の件でなんとなく、考え方が理解できたように思います。さらに切磋琢磨し、私もt_shionoさまのように、初心者のチカラになれるようになりたいと思います♪

    本当にありがとうございました。
  • id:t_shiono
    gets_itaiさん

    うまく動作するようによかったですね。
    少しでもお役にたてたようで何よりです。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません