Martini - Classy web development in Go.
Azure Web サイトで Go 言語を httpPlatformHandler を使って動かしてみた - しばやん雑記 にて Azure Web サイト上で Go 言語を動かすことが出来たので、今回は Martini というフレームワークを使ったアプリケーションを動かすことが出来るか調べました。
アプリケーションと言っても、Martini の公式サイトに載っているサンプルコードを動かしてみるレベルなので、README を見ながら作業をしていきます。
martini/README_ja_JP.md at master · go-martini/martini · GitHub
まずは Martini のインストールですが、前回は GOPATH の設定をしていなかったので D:\home 以下に go というディレクトリを作成して、そのパスを GOPATH に設定しておきました。
GOPATH の設定が終われば、go get コマンドを使って Martini をインストールします。
go get github.com/go-martini/martini
何となく Visual Studio Online "Monaco" からコマンドを実行してみました。特に意味はないです。
特に進捗の表示などもなく、無言で終わりました。
残りはポート番号の設定ぐらいなので、README に書いてある通りに環境変数 PORT に HTTP_PLATFORM_PORT の値を渡す設定を追加してみましたが、何故か go.exe が数秒で落ちてしまい起動しなくなる現象に遭遇しました。
LogFiles ディレクトリに出力されている httpPlatformStdout.txt ファイルに Martini のログが出力されるので調べてみると、ポート番号の後ろにスペースがたくさん付いていました。
[martini] listening on :12664 (development) [martini] listen tcp: GetAddrInfoW: The specified class was not found. exit status 1
これが原因でリッスンに失敗して、サーバーが終了していたようです。
仕方ないのでポート番号を PORT を使わずに HTTP_PLATFORM_PORT から直接取って、RunOnAddr メソッドに渡すように修正しました。
package main import ( "github.com/go-martini/martini" "os" ) func main() { m := martini.Classic() m.Get("/", func() string { return "Hello Martini!" }) m.RunOnAddr(":" + os.Getenv("HTTP_PLATFORM_PORT")) }
これでサーバーが落ちることなく、正しくページが表示されるようになりました。
もう一度 httpPlatformStdout.txt ファイルを開いてみると、今度は正常に処理が完了したというログが出力されていました。これで一応問題は回避できたようです。
[martini] Started GET / for xxx.xxx.xxx.xxx:9676, xxx.xxx.xxx.xxx:9676 [martini] Completed 200 OK in 0 [martini] Started GET / for xxx.xxx.xxx.xxx:9676, xxx.xxx.xxx.xxx:9676 [martini] Completed 200 OK in 0 [martini] Started GET / for xxx.xxx.xxx.xxx:9676, xxx.xxx.xxx.xxx:9676 [martini] Completed 200 OK in 15.6314ms
httpPlatformHandler に関しては現在問い合わせ中ですが、環境変数の展開に問題がある気がします。