2013年3月29日金曜日

Herokuの運用をiphoneで

WEBサービスにかかわらずですが、IT系の運用をするのは大変です。
私が会社員時代の友人とスキーにいった際、友人はウエア、ゴーグルなどと共にノートパソコンを持って行っていました。。
さらに間の悪いことに行きの車中でシステムトラブルの連絡を受け、電話で話している最中に関越トンネル突入。しばらく連絡が途絶え、関越トンネルを超えすぐにSAでノートパソコンを立ち上げ、対応をしていました。

私も基本的に泊りなどで出かける際は、何かあってもすぐに対応できるようにノートパソコンを持っていくのですが、荷物が多い場合などは正直億劫に思うことがあります。
そこで、スマートフォン(iphone)でいいものはないかな?と思い探してみました。いくつかよさそうなものを見つけたのでご紹介します。


1.Doppler for Heroku(無料)
はじめに無料なのでダウンロードして試してみましたが、
Rakeタスクの入力画面やコンソールの起動で、エラーが発生してしまいます。
いつ頃かは忘れてしまいましたが、Herokuでコンソールの起動方法が
heroku console
から
heroku run console (or heroku run script/rails console)
と 、"run"が明示的に必要になったと記憶しているので、恐らくその対応がされていないのではないかと思います。
ただ、ログを見たり、状態を見たりすることはできますし、なんといっても無料なので
非常に良いのではないでしょうか。


2.nezumi(¥850)
HerokuのBlogでも紹介されているアプリです。
有料アプリだけあり、ひと通りの操作をしましたが特にエラーなどなく操作出来ます。
また、非常に直感的に操作が出来、UIがとても良いです。
コンソール入力はもちろんですが、restart,maitenance:on/offなどはボタン操作で行うことができます。
ものすごいトラブルで、ログを一生懸命見なければならないようなトラブル(考えたくないですが)であればやはりノートパソコンは必要だと思いますが、
大抵の場合はこのアプリで済むのではないかと思います。(dynoの追加などスケールアウトもできます)


結果的にnazumiで満足してしまったので試しませんでしたが、その他
Manoku -Manager for Heroku-(¥250)なんてものもあります。
紹介を見る限りなかなかよさそうなので、機会があれば試してみようと思います。

やっぱりスマートフォン(iphone)は便利ですね。運用という意味では我々は、New RelicというHerokuアドオンを使っているのですが、こちらもiphoneアプリがあり、パフォーマンス、ステータスなどを確認する上では重宝しています。

我々もゆくゆくはWEBサービスの付加価値として便利なスマートフォンアプリなんかも提供して行きたいと考えています。





2013年3月26日火曜日

HerokuからISO-2022-JPエンコードのメールを送る

日本語メールを送る際、最近はUTF-8で送っても大抵の場合問題になることはあまりなくなってきたと思います。ただし多くの人にメールを送らなければならないWEBサービスなどの場合はやはりISO-2022-JPで送ったほうがトラブルは少ないと思います。

今回は、HerokuからHerokuが提供しているアドオンを使用し、ISO-2022-JPエンコードのメールを送信する方法をご紹介します。
他にもいろいろを方法があるとおもいますが、後述する"Iron Worker"を使って送るときに私自身少し悩んだので、同じ悩みの人に少しでも参考になればと思っています。

私の環境は以下のとおりです。
  • Ruby: 1.9.2p290
  • Rails : 3.1.10
  • Heroku Stack : bamboo※
  • Heroku Add-ons : SendGrid(メール送信)、Iron Worker(非同期処理)
 ※cedarでも軽く試した所動作しましたが、しっかりとした確認はしていません。

今回の対応を行うにあたり、いろいろ試したのですが結論からいうと、

mail-iso-2022-jp ※を使って対応しました。

※ こちらのgemを作られた黒田さんの会社のサイトの記事はよく参考にさせて頂いています。私も見習って質の高い情報を提供できるようにして行きたいです。

弊社のサービスでメール送る処理は
  • 同期送信
  • 非同期送信
の2つがあります。同期送信はメール送信件数が少ない(パスワード忘れ用メールなど基本的に1通だけ送る場合など)場合の処理です。この処理でISO-2022-JPメールを送る場上記mail-iso-2022-jpなどを使い、メーラークラスを
class HogeMailer < ActionMailer::Base 
  default  :charset => 'ISO-2022-JP', 'Content-Transfer-Encoding' => '7bit'  
  def sendmail 
    メール処理 
  end
のような感じで書いておき、
HogeMailer.sendmail.deliver
で問題なくISO-2022-JPエンコードされたメールが 送信できると思います。

一方、多くのアドレス宛メール一斉送信などは、同期通信をしてしまうとHerokuのリクエストタイムアウト制限(30sec)にかかってしまいますし、ユーザビリティ的にもあまりよいものではありません。
弊社サービスでは、Iron Workerというアドオンを使って非同期処理を行うことにより時間のかかる処理の対応をしています。
Iron Workerを使ってメールを送信する場合は、上記のままだと文字化けが起こると思います。その解決方法に少々悩みましたが、調べた結果Iron WorkerにキックするWorkerクラスに、
merge_gem gem名
今回の場合だと、
merge_gem 'mail-iso-2022-jp'
 をつけることで解決することが出来ました。(これを書かないと、gemの効果がIron Workerにわたらない)

因みに、すでに我々の携帯向けの対応で使っていたこともあり、jpmobileのメーラー機能(Jpmobile::Mailer::Base)をでISO-2022-JPの対応するも考えていたのですが、merge_gemでエラーが出てしまったのと、我々のサービスでは絵文字などに対応する必要がなかった為、mail-iso-2022-jpを使うことにしました。

以上が、HerokuからISO-2022-JPエンコードのメールを送る方法(の例)紹介でした。
何かのお役に立てば幸いです。

2013年3月3日日曜日

New demo site is released !

Now we are working on the launch of "bookers", the reservation system on web.
Before the official release, the demo site has been opened.
There are 6 sample users with different role & language.
You'll select one of the demo user and log in to the "bookers".

Let's have fun in our demo site !
http://www.bookers-on.net/service_bs_detail.html#demo_en