Google App EngineをSBTで使ってみました!
GAE用のSBTのプラグインsbt-appengineがあるようなので、これを使ってもいいのですが、GAE初心者の僕としては、GAEを理解する為に、sbt-appengineを使わずにやってみました。
ここからGoogle App Engine SDK for Javaをダウンロードします。
ダウンロードしたGoogle App Engine SDK for Javaを好きな場所に解凍します。
ここからZIPまたはTGZ版をダウンロードします。
ダウンロードしたSBTを好きな場所に解凍します。
GAEはWARファイルを使ってデプロイするようなので、sbt-appengineは使いませんが、WARファイルを作る為のプラグインxsbt-web-pluginは使います。
解凍したSBTディレクトリの中にsbt/project/plugins.sbtを作成します。
解凍したSBTディレクトリの中にsbt/build.sbtを作成します。
xsbt-web-pluginで作るWARファイルに入れるライブラリをsbt/libに置きます。必要なライブラリは、appengine-java-sdk-***/lib/userの中のjar全てです。サブディレクトリの中のjarもです。だだし、sbt/libにコピーするときに、全てのjarファイルをsbt/lib直下に置く必要があります。ディレクトリ構造をそのままコピーしなように注意が必要です。
WARファイルに組み込まないライブラリも使用するので、それらのライブラリを参照するようにクラスパスの設定をする必要があります。
必要な外部ライブラリは、appengine-java-sdk-***/lib/sharedの中のライブラリです。
sbt/build.sbtに次の記述を追加します。
sbt/src/main/webapp/WEB-INFにweb.xmlを作成します。とりあえず、空のやつを作ります。
sbt/src/main/webapp/WEB-INFにappengine-web.xmlを作成します。とりあえず、最小限の項目を記述します。
<application>タグに、アプリケーションIDを指定するのを忘れずに。アプリケーションIDは、ここから取得できます。
<threadsafe>タグは、アプリケーションが同時に複数のリクエストを受け付けられるようになっているかを指定する項目です。1つづしかリクエスト受け付けられなければfalse、同時に複数のリクエストを処理できる場合にはtrueを指定します。
sbt/src/main/webappにindex.htmlを作成ます。とりあえず、Hello Worldです。
SBTのインタープリタに入り、packageと入力します。
すると、sbt/targetにWARファイル化する前のwebappディレクトリが現れます。GAEの開発用ウェブサーバを起動するときには、このディレクトリを指定するといいでしょう。さらに、sbt/target/scala-***には、(project name)_(scala version)-(project version).warが作成されています。
開発用に使用するウェブサーバもGAE SDKについてきます。appengine-java-sdk-***/bin/dev_appserver.cmd(Windows)です。
起動
appengine-java-sdk-***/bin/dev_appserver.cmd sbt/target/webapp
起動したら、ブラウザでhttp://localhost:8080にアクセスしてみましょう。Hello Worldと表示されていれば成功です。
次のコマンドでアップロードができます。
appengine-java-sdk-***/bin/appcfg.cmd update sbt/target/webapp
途中でemailとpasswordを聞かれるので、入力します。しばらくすると完了します。
管理画面に行って、デプロイされている確認しましょう。
GAE用のSBTのプラグインsbt-appengineがあるようなので、これを使ってもいいのですが、GAE初心者の僕としては、GAEを理解する為に、sbt-appengineを使わずにやってみました。
Index
Google App Engine SDK for Javaのダウンロード
ここからGoogle App Engine SDK for Javaをダウンロードします。
Google App Engine SDK for Javaの解凍
ダウンロードしたGoogle App Engine SDK for Javaを好きな場所に解凍します。
SBTのダウンロード
ここからZIPまたはTGZ版をダウンロードします。
SBTの解凍
ダウンロードしたSBTを好きな場所に解凍します。
xsbt-web-plugin
GAEはWARファイルを使ってデプロイするようなので、sbt-appengineは使いませんが、WARファイルを作る為のプラグインxsbt-web-pluginは使います。
plugins.sbtの設定
解凍したSBTディレクトリの中にsbt/project/plugins.sbtを作成します。
1 |
build.sbtの作成
解凍したSBTディレクトリの中にsbt/build.sbtを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 | organization := "****" version := "0.1.0" scalaVersion := "2.10.3" seq(webSettings :_*) libraryDependencies += "org.eclipse.jetty" % "jetty-webapp" % "9.1.0.v20131115" % "container" libraryDependencies += "org.eclipse.jetty" % "jetty-plus" % "9.1.0.v20131115" % "container" |
WARファイルに組み込むライブラリ
xsbt-web-pluginで作るWARファイルに入れるライブラリをsbt/libに置きます。必要なライブラリは、appengine-java-sdk-***/lib/userの中のjar全てです。サブディレクトリの中のjarもです。だだし、sbt/libにコピーするときに、全てのjarファイルをsbt/lib直下に置く必要があります。ディレクトリ構造をそのままコピーしなように注意が必要です。
外部ライブラリ参照
WARファイルに組み込まないライブラリも使用するので、それらのライブラリを参照するようにクラスパスの設定をする必要があります。
必要な外部ライブラリは、appengine-java-sdk-***/lib/sharedの中のライブラリです。
sbt/build.sbtに次の記述を追加します。
1 2 3 4 5 6 | val base = baseDirectory.value val gae = base / ".." / "appengine-java-sdk-1.8.8" / "lib" / "shared" val jars = (gae ** "*.jar") +++ (gae / "jsp" / "*.jar") jars.classpath } |
web.xmlの作成
sbt/src/main/webapp/WEB-INFにweb.xmlを作成します。とりあえず、空のやつを作ります。
1 2 | </web-app> |
appengine-web.xmlの作成
sbt/src/main/webapp/WEB-INFにappengine-web.xmlを作成します。とりあえず、最小限の項目を記述します。
1 2 3 4 5 6 | <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>application-id</application> <version>1</version> <threadsafe>true</threadsafe> </appengine-web-app> |
<application>タグに、アプリケーションIDを指定するのを忘れずに。アプリケーションIDは、ここから取得できます。
<threadsafe>タグは、アプリケーションが同時に複数のリクエストを受け付けられるようになっているかを指定する項目です。1つづしかリクエスト受け付けられなければfalse、同時に複数のリクエストを処理できる場合にはtrueを指定します。
静的ファイルでHello World
sbt/src/main/webappにindex.htmlを作成ます。とりあえず、Hello Worldです。
1 2 3 4 5 6 7 8 | <head> <title>Title</title> </head> <body> Hello World </body> </html> |
WARファイルの作成
SBTのインタープリタに入り、packageと入力します。
> sbt
sbt> package
sbt> package
すると、sbt/targetにWARファイル化する前のwebappディレクトリが現れます。GAEの開発用ウェブサーバを起動するときには、このディレクトリを指定するといいでしょう。さらに、sbt/target/scala-***には、(project name)_(scala version)-(project version).warが作成されています。
開発用ウェブサーバの起動
開発用に使用するウェブサーバもGAE SDKについてきます。appengine-java-sdk-***/bin/dev_appserver.cmd(Windows)です。
起動
appengine-java-sdk-***/bin/dev_appserver.cmd sbt/target/webapp
起動したら、ブラウザでhttp://localhost:8080にアクセスしてみましょう。Hello Worldと表示されていれば成功です。
アプリケーションのアップロード
次のコマンドでアップロードができます。
appengine-java-sdk-***/bin/appcfg.cmd update sbt/target/webapp
途中でemailとpasswordを聞かれるので、入力します。しばらくすると完了します。
管理画面に行って、デプロイされている確認しましょう。
関連記事
0 件のコメント:
コメントを投稿