2013年4月28日日曜日

TwitterのbotをdotCloud環境で動かしてみた時のメモ

このエントリーをはてなブックマークに追加 はてなブックマーク - TwitterのbotをdotCloud環境で動かしてみた時のメモ
Bloggerへの移行前のWordpressにて2012-10-11に投稿した記事です。

タイトルの通り、TwitterのbotをdotCloud環境を利用して動作させてみた。せっかくなので、自分の好きな音楽に関係のあるものを作ろうという事で、10月6日、7日に開催される、「朝霧JAM」というフェスまでの日数をカウントダウンするbotを作成。(@asagiri_countとして稼働中)概要は以下の通り。
  • rubyで作成
  • dotCloud上にアプリケーションは配置
  • cronで1日4回実行
本当は細かく書きたいのですが、別に何かに書こうとか考えてなくて、適当に作業してたので自分の中のポイントだけ。(本当に役に立たない)
  1. dotCloudのサーバーの時間と日本の時間の差
  2. Twitterの重複投稿エラー?
  3. 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 件のコメント:

コメントを投稿