しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Web サイトで Revel を使ったアプリケーションを動かす

f:id:shiba-yan:20140929210208p:plain

The Revel Web Framework for Go

Go 言語のランタイムは入っているものとして、まずは Revel のインストールから行います。

go get github.com/revel/revel
go get github.com/revel/cmd/revel

GOPATH が設定されていれば成功するはずです。

f:id:shiba-yan:20140929205709p:plain

Kudu の Debug Console から作業を行いましたが、先に go.exe へパスを通しておきました。

これからは revel コマンドを使って進めていきますが、revel.exe は GOPATH の bin にインストールされるので、前もってパスを通しておきます。

f:id:shiba-yan:20140929205718p:plain

パスが通っていれば revel と打ち込めば実行出来るようになっています。

とりあえずは新しいアプリケーションを作りたいので、revel new コマンドを使ってテンプレートを作成します。アプリ名は何でもいいですが、公式のマニュアルの通りに myapp としておきました。

f:id:shiba-yan:20140929205727p:plain

これで GOPATH\src\myapp にテンプレートが作成されました。

後は revel run myapp と打ち込めばサーバーが起動するとマニュアルにはありますが、httpPlatformHandler を使うためにポート番号を指定する必要があります。調べたところ run の 3 つめの引数でポート番号を指定できるらしいので、以下のように呼び出せば問題なさそうです。

revel run myapp dev %HTTP_PLATFORM_PORT%

これで Web.config を書けば動くと思ったのですが、go.exe へのパスが通っていないとエラーになってしまったので、バッチファイルを経由して revel run を実行するようにしました。

@echo off

set PATH=%PATH%;%GOROOT%\bin

%GOPATH%\bin\revel.exe %~1 %~2 %~3 %~4 %~5

この内容で適当な場所に revel.cmd と名前を付けて保存して、以下のような Web.config を wwwroot 直下に置けばサーバーが起動します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="httpPlatformHandlerMain" modules="httpPlatformHandler" path="*" verb="*" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%GOPATH%\bin\revel.cmd" arguments="run myapp dev %HTTP_PLATFORM_PORT%" startupTimeLimit="60" startupRetryCount="5" />
  </system.webServer>
</configuration>

今回は revel.cmd を GOPATH\bin 以下に作成したので、環境変数を使って綺麗に書けました。

ページへアクセスしてみると、テンプレートとして作成されたページが無事に表示されました。

f:id:shiba-yan:20140929205736p:plain

ちなみに Process Explorer での表示はこんな感じになってます。

f:id:shiba-yan:20140929212309p:plain

バッチファイルを経由しているので cmd.exe の下に revel.exe が紐づく形になっています。

Revel はファイルの変更があった場合には、自動的に再コンパイルをしてくれるようになっているので、Visual Studio Online "Monaco" を使ってコードを書きながら、その場で確認するといったことがやりやすくなっています。実用的ですね。