UbuntuへGo1.7をインストールする

UbuntuへGo1.7をインストールしたのでその時の作業ログ

$ sudo apt-get update
$ sudo apt-get -y upgrade
$ wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz
$ sudo tar -xvf go1.7.4.linux-amd64.tar.gz
$ sudo mv go /usr/local
$ mkdir ~/gocode
$ echo export GOROOT=/usr/local/go  >> ~/.bash_profile
$ echo export GOPATH=$HOME/gocode  >> ~/.bash_profile
$ echo export PATH=$GOPATH/bin:$GOROOT/bin:$PATH  >> ~/.bash_profile
$ source ~/.bash_profile
$ go version

versionが表示されればOK.

go version go1.7.4 linux/amd64

SupervisorでGoをデーモン化する。CentOS/Ubuntu

GoアプリケーションをCentOS環境で、デーモン化する必要があったので、その時の作業ログ。

CentOS

$ wget https://bootstrap.pypa.io/ez_setup.py -O - | python
$ easy_install --version
$ easy_install supervisor
$ supervisord -v
$ echo_supervisord_conf > /etc/supervisord.conf

設定ファイルを変更

;/etc/supervisord.conf
[unix_http_server]
file = /tmp/supervisor.sock
chmod = 0777
chown= root:root


[inet_http_server]
port=9001
username = admin
password = yourpassword

[supervisorctl]
serverurl = unix:///tmp/supervisor.sock

[supervisord]
logfile=/var/log/supervisord/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10
loglevel=info
pidfile=/var/run/supervisord.pid
nodaemon=true
minfds=1024
minprocs=200
user=root
childlogdir=/var/log/supervisord/


[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface


[program:app]
command=/path-to-path/yourappname
autostart = true
startsecs = 5
user = root
redirect_stderr = true
stdout_logfile = /var/log/supervisord/app.log

Run

supervisord

Stop/Reload

以下のコマンドで管理モードに入る

supervisorctl
reload

Ubuntu

$ sudo apt-get install supervisor
$ sudo vim /etc/supervisor/conf.d/app.conf

設定ファイルを変更

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf

[program:app]
command=<your path>
autostart=true
autorestart=true
startretries=10
user=root
redirect_stderr=true
stderr_logfile=/var/log/long.err.log
stdout_logfile=/var/log/long.out.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10

(command に指定する前にbuildしておく必要がある。)

$ sudo service supervisor restart

GAE/GO datastoreのローカル開発をしてみる。

appengine/datastoreをローカルの開発環境でテストしたいときはどうするのかなと思ったけれど、以下でOKであった。

command

goapp test ./src/<path>

source

import (
        "testing"
        "google.golang.org/appengine"
        "google.golang.org/appengine/aetest"
        "google.golang.org/appengine/datastore"
)

func TestPostCompany(t *testing.T) {

        inst, err := aetest.NewInstance(nil)
        if err != nil {
                t.Fatalf("Failed to create instance: %v", err)
        }
        defer inst.Close()

        req1, err := inst.NewRequest("GET", "/gophers", nil)
        if err != nil {
                t.Fatalf("Failed to create req1: %v", err)
        }
        c1 := appengine.NewContext(req1)

        var companyResponse = struct {
                Name, Address, Nick, Key string
        }{}

        var key *datastore.Key
        key, _ = datastore.DecodeKey(companyResponse.Key)

        var savedCompany = companyResponse

        datastore.Get(c1, key, &savedCompany)
        datastore.Delete(c1, key)
}

link

Local Unit Testing for Go  |  App Engine standard environment for Go  |  Google Cloud Platform

しかし、おそいな、、もっと早くできなものか、、

Go言語 echo serverからtwitterクライアントのanacondaを利用する。 

AppEngine上でecho serve から、twitterクライアントのanacondaを使用する時のメモ、

echo のContextからどうやって、*http.Requestを取得するのか迷ったのだけれど、以下でいけるみたい。

c.Request().(*standard.Request).Request

anacondaでapiを生成するサンプル。

c := appengine.NewContext(echo.Request().(*standard.Request).Request)
                api.HttpClient.Transport = &urlfetch.Transport{Context: c}

anaconda以外にも、*http.Requestが必要になる場面は多々ありそう。

github.com github.com