TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

CraftBeerFanに、ACSに起因したトラブルが発生したのでまとめました(長文です)

少し前に書いたエントリ

人柱という噂もあるけど、ACS使った

と書いた通りに、ACSに起因したトラブルが生じました(T_T)

今回のトラブルについてはACS - Event.Query suddenly returns Internal 500 responseというチケットが切られていますが、私は復旧してるのですが、人によっては、まだトラブル継続しているみたいです。

人柱の使命としてトラブル発生から解決するまでの流れをまとめておきました

あ、そうそうこういうので、

「やっぱりACSはダメだよね」

という結論には今のところ達しないですね。

結局のところ完璧なモノって世の中ないわけだし、トラブルが前提でアプリというかシステム全体を考えておくべきというのを、以前うちの会社主催でやったAWSワークショップで学んだわけだし。

自分が作ってるアプリは、最悪お店の名前、住所、緯度経度・・・をJSON化したファイルをスマフォ側に一定期間キャッシュしつつプラスαの機能を実装すれば、ある程度継続して利用できる可能性があるので、その辺り改善すればいいのかなと思っており、その辺りの考えを別エントリでまとめておこうかと思ってます

トラブル内容

この↓現在位置を取得して検索する機能だけが何故か利用できなくなった。 地図検索機能

覚えてる範囲で時系列での流れ

8月27日の夕方頃

帰宅中の電車の中で、開発の続きをしようと思ってiPhoneシミュレーター起動した際に地図上に表示されるはずのお店が全く出てこない状況になりました。

当初は、自分が作ってる開発版のバグかなと思ったのですが、その後リリースしてるバージョンを自分のiPhoneにインストールしなおしたら、同様の症状が出たので、この時点でTitanium Cloud Services側の不具合かなと思い、以下のtweetをしてました

その時に確認できたこととしては

  • サーバー自体は稼働してた
  • レスポンスもあり、status code 200返してる
  • 都道府県から辿っていく検索も正常に稼働してた

8月27日の夜

都道府県のリストから辿っていく機能が正常化どうしてるのがわかった時点で、緯度経度情報をキーにしてクエリー発行する場合にトラブルが生じているのかと思ったのですが、切り分けのためにcURLで以下の様な2つを実行しました。

https://api.cloud.appcelerator.com/v1/places/show.json?key=xx&place_id=51e342db0cfccd0b7030c208
https://api.cloud.appcelerator.com/v1/places/search.json?key=xx&latitude=35.744674&longitude=139.608928

両方とも意図した値が得られたので、自分の勘違いかと思ったのですが、Titanium側の以下のcodeの部分の動作を確認しました

Cloud = require('ti.cloud') 
Cloud.Places.query
  page: 1
  per_page: 200
  where:
    state:'東京都'

これは正常に値が得られることがわかりました。

ただ、以下の緯度経度を検索条件にしたコード実行すると

  • ステータスコードは200が返ってきた
  • Places.queryで得られる値を調べるとper_page: 20としてるので本来なら20件分の情報が取得できるはずなのに、中身が空っぽの値が返ってきた

という感じだったので、やはり緯度経度を検索条件にした場合にのみ生じる不具合というので、間違いなさそうな感じになりました

Cloud = require('ti.cloud')
Cloud.Places.query
  page: 1
  per_page: 20
  where:
    lnglat:
      $nearSphere:[longitude,latitude] 
      $maxDistance: 0.01

8月28日の早朝

以下の様なtweetを見つけました

完全に同じではないのですが、かなり似たような症状だったので、自分も同じようなトラブルに直面してるみたいなことを書き込みました

すると、元々質問をされた方が、

Some ACS query APIs have been reported as not working on this forum. Here's a question about events query: http://developer.appcelerator.com/question/156435.

というコメントを残しており、ACS Events Query BrokenというQ&Aのコメント欄に

I just submitted a ticket as well. Hopefully they escalate it. https://jira.appcelerator.org/browse/TC-2829

というのを見つけて、最終的にACS - Event.Query suddenly returns Internal 500 responseに辿り着き、自分のトラブルはこれだったことに行き着きました。

8月28日の早朝移行考えたこと

復旧を待つだけしか方法がないかなとやや諦めていたのですが、実は1つだけ回避方法を見つけていました。トラブルが発生してる最中に、お店の情報を2,3つ登録したら、なぜかそれだけは地図上に表示されていました。

新規登録し直すことでもしかしたら復旧するのかなという目論見があったので

  • 既存のお店の情報を一旦全部消去
  • お店を再登録
  • 数人のユーザの方がいくつかのお店をお気に入り登録していたので、それを再設定

という流れで復旧するかもしれないという考えが浮かんで、以下の様なことをtweetしました

今回のトラブルが生じる前に、お店の一括削除と一括登録するスクリプトをすでに作っていたのでその点はすぐに出来たのですが、問題はお気に入り情報の再設定。

再設定の流れとしては

  1. お気に入り登録してるユーザIDとお店の名前&place_idを調べる
  2. 新規登録したお店の中から、お気に入り登録されているお店のplace_idを調べる
  3. お気に入り登録を再設定

という感じです。

お気に入り登録してるユーザの方が20名程度でそれほど多くないとはいえ、手作業だと作業ミス生じるから、プログラム化しないとダメかと思ったのですが、IDとお店の名前&place_idを調べるためのスクリプトを書くか、それともcURLでチマチマ作業するか判断に悩むような感じでした。

  • 日中は本業があるのでコードを書いたりする時間がない
  • 自分以外の人にも生じてるトラブルなので、ある程度の段階で復旧するであろうという期待

を考えて、結局はお店の新規登録作業はせずに、その後

という形になりました

今後の教訓

今回トラブルが発生した段階で、Appceleratorのサポート関連のTwitterアカウントがないのか調べたりもしたのですが、すぐに見つからず、どうやって情報収集とか報告すればいいのかすらわかりませんでした。

今回の件で学んだこととしては

  • AppceleratorのQ&Aサイトの情報をチェックする
  • AppceleratorのIssueTrackerで、バグ報告が上がってないかチェックする

というのが取るべき道なんですね。

日本でACS使ってる人がどの程度いるかわかりませんが、このFashionistというアプリのように、全世界で見ると利用されてるユーザがいることがわかりました。