読者です 読者をやめる 読者になる 読者になる

uoz 作業日記

様々な作業の記録を共有するブログです。

サーバーサイドjavascript RingoJSでgoogle app engine上で動かしてみる。

基本的な方針

google app engine 上でwebsocketを使ってなんか作りたい。
node.jsがないので、ここを参考に
http://d.hatena.ne.jp/drillbits/20101218/serverside_javascript_on_appengine
JAVAで動くRongoJSを使ってみよう

チャットじゃ面白くないので、そのページにアクセスしてる人のマウスカーソルが他の人にも見える仕組みを作ろう。
それも、マウスカーソルの位置を直に表示するのもつまらんので、なんかグリッドレイアウトのページにして、カーソルが多くあるグリッドほど赤く表示されるヒートマップみたいな感じにしよう

追記
どうやらgae上で動かすと、非同期通信とかwebsokectとかできないっぽい。

事前準備


Eclipseでつくるので、eclipseを用意して、google app engine javaアプリが作れる環境を整えとく。google pluginとかをいれておくこと。
私はmac os xで作ることにする。

RingioJSの導入

RingoJS公式から落とす


http://ringojs.org/
バージョンは0.10。
ユーザディレクトリ直下にいれてみた。

シェルを立ち上げてみる


ここを参考に
http://d.hatena.ne.jp/syttru/20101018/1287421720

bin/ringoを実行しようと思ったら Permission deniedと言われたので、実行権限をつけて、その後立ち上げ。

$ chmod +x bin/ringo
$ bin ringo
>> print("a")
a

動いた!

ついでに、ついてきたwebサーバのサンプルを動かしてみよう

$ bin/ringo examples/httpserver.js 
0    [main] INFO  ringo.httpserver  - Set app module: /Users/aoyagisaizo/ringojs-0.10/examples/httpserver
302  [main] INFO  org.eclipse.jetty.server.Server  - jetty-7.5.4.v20111024
367  [main] INFO  org.eclipse.jetty.server.handler.ContextHandler  - started o.e.j.s.ServletContextHandler{/,null}
377  [main] INFO  org.eclipse.jetty.server.AbstractConnector  - Started SelectChannelConnector@0.0.0.0:8080 STARTING
396  [main] INFO  ringo.httpserver  - Server on http://localhost:8080 started.

http://localhost:8080にアクセスすると、hello worldって表示された。
よしよし。


参考までに公式チュートリアル
http://ringojs.org/tutorial/
これはやってない。


GAEアプリに組み込む

datastore


ここまで来て気づいたが、datastoreにアクセスできるんだろうか?
cloud strageは行けそうな気がするけど。
このアプリにはdatasoteはいらんけど、一応テストしなきゃ行けない事情がある。


http://blog.vier.jp/2013/06/33google-cloud-datastore-13.html
これをみると、web api経由でいけるらしい。でも遅いのかなあ。

https://developers.google.com/datastore/
公式を見て試しに何かやってみる。
ちょっとこれは長くなりそうなので、別記事にしよう。
http://uozias.hatenablog.com/entry/2014/03/29/Google_app_engine%E4%B8%8A%E3%81%AERingoJS%E3%81%8B%E3%82%89datastore%E3%81%AB%E3%81%A4%E3%81%AA%E3%81%92%E3%82%8B

ringoのwebアプリひな形を作る。

こっちを参考に
http://d.hatena.ne.jp/syttru/20101019/1287506676

$ chmod +x bin/ringo-admin
$  bin/ringo-admin create ringoJSTest
Creating Ringo web application in ringoJSTest
 + Copying /Users/XXXXXX/ringojs-0.10/tools/admin/skeletons/app to ringoJSTest ... done

何かができた。

できたフォルダの中のredmeを見ると、できたフォルダ内のmain.jsを立ち上げれば、webアプリが起動するらしい。やってみよう。

$ bin/ringo ringoJSTest/main.js
0    [main] INFO  ringo.httpserver  - Set app module: /Users/aoyagisaizo/ringojs-0.10/ringoJSTest/main
307  [main] INFO  org.eclipse.jetty.server.Server  - jetty-7.5.4.v20111024
369  [main] INFO  org.eclipse.jetty.server.handler.ContextHandler  - started o.e.j.s.ServletContextHandler{/,null}
380  [main] INFO  org.eclipse.jetty.server.AbstractConnector  - Started SelectChannelConnector@0.0.0.0:8080 STARTING
404  [main] INFO  ringo.httpserver  - Server on http://localhost:8080 started.

http://localhost:8080にアクセスすると、こんな画面がでた。

gaeプロジェクトに放り込む


あらかじめ、eclipseでNew web application projectを選んで、gaeアプリを作っておく。
こいつに入れるには、ringojs自体も入ってないといけないんじゃないか?
どうしたらいいのか


http://kjunichi.cocolog-nifty.com/misc/2013/04/ringojsgoogle-a.html
ここをみてやってみる。

$ bin/ringo-admin create --google-appengine ../ringoJSTest

こんどは、WEB-INFディレクトリができたから、これをgaeアプリの中に突っ込んでみる。
web-xmlを眺めてみると、このアプリはどこにアクセスしてもringojs用のサーブレットが立ち上がるようになってるらしい。


ローカルで立ち上げてみる。
こんなのでた。
f:id:uoz:20140329151258j:plain

gae上にデプロイしてみる。
ちゃんと動いた。

実際のアプリ作りは次の投稿から。

プログラミング Google App Engine

プログラミング Google App Engine

Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ)

Google App Engine for Java [実践]クラウドシステム構築 (WEB+DB PRESS plus) (WEB+DB PRESSプラスシリーズ) (WEB+DB PRESS plusシリーズ)