タイトルの通り、TwitterのbotをdotCloud環境を利用して動作させてみた。せっかくなので、自分の好きな音楽に関係のあるものを作ろうという事で、10月6日、7日に開催される、「朝霧JAM」というフェスまでの日数をカウントダウンするbotを作成。(@asagiri_countとして稼働中)概要は以下の通り。
本当は細かく書きたいのですが、別に何かに書こうとか考えてなくて、適当に作業してたので自分の中のポイントだけ。(本当に役に立たない)
- rubyで作成
- dotCloud上にアプリケーションは配置
- cronで1日4回実行
- dotCloudのサーバーの時間と日本の時間の差
- Twitterの重複投稿エラー?
- cronが止まる?
1.dotCloudのサーバーの時間と日本の時間の差
まあ、そりゃそうだろ、って思ってたけど差分あり。ただ、ありがたいことにdotCloudのサーバーへはssh接続が出来るのでログイン後、確認。dotcloud@ramen-default-www-0:~$ date Sun Sep 30 14:10:36 UTC 2012
toshihiro308$ date 2012年 9月30日 日曜日 23時10分59秒 JSTという事でだいたい9時間ほど違うようなので、それだけプログラムで引いた。そんだけっす。
2.Twitterの重複投稿エラー?
全く同じ投稿をするとエラーになって以下のステータスが返却される。Status is a duplicate. (Twitter::Error::Forbidden)
そういえば、自分も連投してしまった時エラーになってたけど、内部ではこれが発生していたのね。これは単純にtweetする内容の先頭にランダムで文言を追加するようにして逃げた。どうやら少しでも違えば大丈夫らしいので。
3.cronが止まる??
これが一番厄介だった。dotCloudではcronが設定出来て、僕の場合は1日に4回投稿したかったので、6時間毎にrubyを実行するようにしておいた。が、1日ほど経過するとcronが動いてないのか、投稿されなくなってしまう。ついでにsshも繋がらない。とりあえず、サイトのURL(Webアプリケーションとして登録しているので)を叩くと、すぐに表示されず、以下の文章とローディング画面が。This application has no recent traffic and has been put into hibernation. It may tala up to 30 seconds to wake up….上記に書いてある通り、30秒ほど待つとページが表示される。それからはsshが接続出来るようになった。これより仮説として、一定時間リクエストがないとWebアプリは落ちてしまって、cronもついでに動作しなくなるのではないかと考えてた。そこで実験的に1時間に1回自分のWebサイトにアクセスするようにした。
00 0-23/1 * * * wget http://myapplicationname.dotcloud.com/これ以降はcronがかずっと停止せずに動くようになったので、上記仮説は正しかったのかも。(それらしい文献を見つけれなかった)そもそももっと根本的な解決法方法があったのかもしれないけど、よく分からなかったのでこれでOKという事にさせて下さい
0 件のコメント:
コメントを投稿