2012年4月3日

軽量フレームワーク「Play」GAEにデプロイ最短手順・2012最新版


Javaの軽量WebフレームワークPlay。EclipseやGoogle App Engineとの相性もだいぶこなれ、インストールやデプロイもかなり容易になってきました。Eclipseの環境を整えてPlayアプリをGoogle App Engineにデプロイするまでの最短の手順を説明します。



検証環境


検証に使ったのはPlay 1.2.4です。GAEモジュールはPlay 2.0に対応していないので、残念ながら2.0系ではまだGAEを使うことはできないようです。


Java SE 7u1
Java EE 6
Eclipse 3.7.1+Pleiades 1.3.3
Play 1.2.4
Google App Engine SDK 1.6.3.1
Play GAEモジュール 1.6.0

目次

◆とりあえず手順だけ知りたい人はこちら
◆JavaEE SDKがインストールされていない人はここから(※Java SEでは不足なので注意)
◆Eclipseがインストールされていない人はここから
◆Playがインストールされていない人はここから
◆Google App Engine SDKがインストールされていない人はここから
◆PlayのGAEモジュールがインストールされていない人はここから
◆PlayをEclipseで使いたい人はこちら
◆うまく行かないときはこちら

最短の手順だけ知りたい人向け

環境を整える

Java EE

  ここからダウンロード

Play

  ここからダウンロード

Google App Engine SDK

  ここからダウンロード

Play GAEモジュール

> play install gae

手順


1. アプリケーション作成を作成します。

> play new AppName

2. conf/dependencies.ymlを修正

require:
  - play -> gae 1.6.0
という行を追加します。

3. 依存関係の構成

> play deps

4. Eclipseプロジェクト化し、Eclipseに取り込みます。この手順はやらなくてもかまいません。


> play eclipsify AppName

5. 一度Playを実行します。

※Eclipse上から同等の操作(Playのローカルサーバ実行)をおこなっても、マニフェストファイル(war/WEB-INF/appengine-web.xml)がどういうわけだか作成されません。コマンドラインから実行しましょう。

> play run
> Ctrl+C

6. マニフェストファイルを修正します。

一回実行すると、war/WEB-INF/appengine-web.xmlというファイルが作成されます。

このファイルを次のように修正します。

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>yourappname</application>
<version>1</version>
<threadsafe>true</threadsafe>
</appengine-web-app>

<application>に指定するのは、Google App EngineのApplication Identifierです。



管理コンソール https://appengine.google.com/ にアクセスし、アプリケーション名をクリックします。左上にApplication Identifierが表示されています。

7. GAEにデプロイ

> play gae:deploy --gae=c:\Develop\Java\appengine-java-sdk-1.6.3.1

--gaeオプションは、Google App Engine SDKを展開した場所を指定します。毎回指定するのは面倒な場合は、環境変数をセットしておくこともできます。

GAE_PATHという環境変数にGoogle App Engine SDKのパスを指定しておくと、--gaeオプションが不要になります。

Java EE SDKをインストール

[前提条件]

特になし

Google App Engineを使うには、Java SEだけではなくJavaEEが必要です。Playを使うだけならJavaEEは不要です。

Oracleのサイトから最新のJavaEE SDKをインストールします。

ここでの注意は、Java SEとJavaEE SDKとは別のもので、Java SEとJavaEE SDKの両方をインストールしなければいけない点です。(しかも、Java SEのバージョンは7なのにJavaEE SDKのバージョンは6というややこしさ)

ダウンロードページはここ↓
http://www.oracle.com/technetwork/jp/java/javaee/downloads/index.html




もしJava環境がいっさい入っていない場合は、左端の「Java EE6 SDK with JDK 7」を選びます。

Java SEはすでにインストールされている人は、真ん中の「Java EE 6 SDK」を選びます。

Eclipseをインストール

[前提条件]

JavaEE SDKがインストールされていること

Eclipseをダウンロードします。Eclipseも非常にたくさんのパッケージがありますが、今回のケースで必要なのは、「Eclipse IDE for Java EE Developers」というパッケージです。

Eclipse IDE for Java EE Developersのダウンロードページはこちらです。
http://eclipse.org/downloads/



ダウンロードしたらインストーラでインストールします。Java SDKの場所などはインストーラが見つけ出してくれます。

日本語化を含めたインストール・設定の手順は以下のページが詳しいです。
http://www.kkaneko.com/rinkou/javaintro/eclipse.html

Playをインストール

[前提条件]

Java EE SDKがインストールされていること
Eclipseがインストールされていること

ダウンロードはこちら↓
http://www.playframework.org/



Play 2.0がリリースされてしまったので、Playのサイトは2.0一色です。1.x系のバージョンをダウンロードするには、"all versions"というリンクからたどる必要があります。

しかしインストールは簡単です。ダウンロードしたら展開するだけで、インストール作業などは要りません。

それから、インストールフォルダの直下にパスを通しておきましょう。

Google App Engine SDKをインストール

[前提条件]

Java EE SDKがインストールされていること
Eclipseがインストールされていること

ダウンロードはこちらから↓
https://developers.google.com/appengine/downloads?hl=ja#Google_App_Engine_SDK_for_Java

Playと同様、ダウンロードしたら展開するだけです。

PlayのGAEモジュールをインストール

[前提条件]

Java EE SDKがインストールされていること
Eclipseがインストールされていること
Playがインストールされていること

手動でダウンロードする必要はありません。playコマンドを使ってインストールができます。

> play install gae

これでGAEモジュールをダウンロードして、モジュールとしてインストールしてくれます。最新バージョンも判断してくれます。

Eclipseを使ったPlayアプリケーション開発

play eclipsifyコマンド

Playには、Eclipseでの利用を前提としたeclipsifyというコマンドがあります。

生成したアプリケーションディレクトリに移動して次のコマンドを実行します。

> play eclipsify

これでEclipseのプロジェクトが作成されました。

Eclipseのワークスペースに読み込むには次のようにします。
  1. メニューから「ファイル」>「インポート」を選択
  2. 「一般」>「既存プロジェクトをワークスペースへ」を選択
  3. アプリケーションディレクトリを選択し、「完了」をクリック

Eclipse Playプラグイン

Play用Eclipseプラグインは、Playの配布物の中に含まれています。

${play.path}\support\eclipse\org.playframework.playclipse_0.7.0.jar

というファイルです。これを

${eclipse.path}\dropins

というディレクトリにコピーして、Eclipseを再起動するだけです。

メニューに「再生!」という項目が表示されれば、インストールは成功しています。それにしても「再生!」ってアンタ。



実行とデバッグ

1. Playサーバを実行

まず、ローカルマシンでPlayサーバを実行します。

eclipse/AppName.launcheというファイルがありますので、右クリックして「実行」>「AppName」を選択します。

コンソールに

Listening for transport dt_socket at address: 8000
20:31:09,440 INFO  ~ Starting D:\Projects\eclipse\workspace\AppName
20:31:09,448 INFO  ~ Module gae is available (D:\Develop\Java\play-1.2.4\modules\gae-1.6.0)
20:31:10,548 WARN  ~ You're running Play! in DEV mode
20:31:10,725 INFO  ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...

と表示されれば起動できています。試しにブラウザに

http://localhost:9000/

と入力して、ページが表示されることを確認しておきましょう。

2.デバッガを接続

JPDA(Java Platform Debug Architecture)を使って、Playサーバにデバッグ接続します。

eclipse/Connect JPDA to AppName.launchというファイルを右クリックし、「デバッグ」>「AppName」を選択します。

表面的には特に何も起きませんが、これでデバッガがPlayサーバに接続しています。

試しに、Application#index()メソッドのrender()行にブレークポイントを設定して、もう一度

http://localhost:9000/

にアクセスしてみましょう。すると、下の図のようにブレークして止まってくれます。


うまく行かないときは

慣れてしまえば異様に簡単な手順なのですが、慣れるまではこまごました作業を見落としがちです。

うまくいかないときは、たいてい何かの作業を忘れています。

最後に、こうした忘れがちな作業をまとめておきます。

●gae:deployに--gaeオプションを指定しましたか?
●環境変数GAE_PATHを設定しましたか?
●dependencies.ymlに依存関係を記述しましたか?
●play depsを実行しましたか?
●appengine-web.xmlにApplication Identifierを記述しましたか?

変なエラーが出た

僕の環境はDドライブにEclipseのワークスペースを置いてあるのですが、デプロイ(play gae:deploy)の実行時に次のような変てこなエラーが出ました。

Traceback (most recent call last):
  File "D:\Develop\Java\play-1.2.4\play", line 153, in 
    status = cmdloader.commands[play_command].execute(command=play_command, app=play_app, args=remaining_args, env=play_env, cmdloader=cmdloader)
  File "D:\Develop\Java\play-1.2.4\modules\gae-1.6.0\commands.py", line 222, in execute
    package_as_gae_war(app, env, war_path, None)
  File "D:\Develop\Java\play-1.2.4\modules\gae-1.6.0\commands.py", line 54, in package_as_gae_war
    if isParentOf(app.path, war_path):
  File "D:\Develop\Java\play-1.2.4\framework\pym\play\utils.py", line 38, in isParentOf
    relpath = os.path.relpath(path1, path2)
  File "D:\Develop\Java\play-1.2.4\python\lib\ntpath.py", line 488, in relpath
    % (path_list[0], start_list[0]))
ValueError: path is on drive D:, start on drive c:

これは、次のようにntpath.pyというファイルの以下の箇所を書き換えれば回避できます。書き換えることによる影響はありません。

${play.path}\python\lib\ntpath.py:
484:        else:
485:            raise ValueError("path is on drive %s, start on drive %s"
486:                                                % (path_list[0], start_list[0]))

↓以下のようにコメントアウトする
484:        #else:
485:        #    raise ValueError("path is on drive %s, start on drive %s"
486:        #                                        % (path_list[0], start_list[0]))

0 コメント:

コメントを投稿

長崎県 引越 見積もり 単身引っ越し 料金 還暦祝い 父 Blog Entry Ranking
" ); 出会い系を例示