Tomute’s Notes Twitter

2014-08-11

[]「Heroku入門」に関するメモ

Heroku入門 (全12回) - プログラミングならドットインストールのレッスンに関するメモを以下に記載する。


#05 Railsアプリケーションを作ろう | Heroku入門 - プログラミングならドットインストール

therubyracerインストールしていなければ、別途インストールする必要有。インストールは以下のコマンドで出来る。

$ sudo gem install therubyracer

#07 Heroku上で確認してみよう | Heroku入門 - プログラミングならドットインストール

以下のコマンド実行時にエラーが出た場合には、bundle installを実行する(bundle installしないとGemfile.lockファイルの内容が変更されないため)。

$ git push heroku master

#12 foremanを使ってみよう | Heroku入門 - プログラミングならドットインストール

StandaloneでHeroku Toolbeltインストールした場合、foremanがインストールされないようなので、以下のコマンドを実行して個別にインストールを行う。

$ sudo gem install foreman

その他メモ

Gemfileでrubyのバージョンを指定していないと、git pushした際に警告されるので、以下のような記述をGemfileに追加する。

ruby '2.1.2'

参考記事

2014-07-25

[] AngularHotkeys.jsの使い方

AngularJSを使ったWebアプリに対して、キーボードショートカットを簡単に組み込む事ができるAngularHotkeys.jsの使い方をメモしておく。


【事前準備】

  1. GitHub - chieffancypants/angular-hotkeys: Configuration-centric keyboard shortcuts for your Angular apps.から必要なライブラリ(hotkeys.jsとhotkeys.css)を取得し、所定のフォルダに配置する
  2. mousetrapが前提ライブラリとして必要なので、GitHub - ccampbell/mousetrap: Simple library for handling keyboard shortcuts in Javascriptからmousetrap.js、もしくはmousetrap.min.jsを取得し、所定のフォルダに配置する

 以上で準備は完了。


【使い方】

まず、ライブラリを読み込むために、htmlファイルに以下のように記述する。

<link rel='stylesheet' href='/stylesheets/hotkeys.css' />
<script src="/javascripts/mousetrap.min.js"></script>
<script src="/javascripts/hotkeys.js"></script>

次にAngularのコントローラのコードにショートカットの定義を記載する。

具体的には以下のような形になる。

var testApp = angular.module('testApp', ['cfp.hotkeys']);

testApp.controller('mainCtrl', function($scope, hotkeys) {
    $scope.score = 0;

    hotkeys.add({
        combo: 'ctrl+up',
        description: 'This is a test shortcut.',
        callback: function() {
            $scope.score += 1;
        }
    });
});

これで、完了。Webアプリの画面上でcontrolキーとupを押すと、スコアを1増やす事が出来るようになる。

なお、AngularHotkeys.jsショートカットチートシートを自動的に生成してくれて便利。「?」キーを押すと以下のようなチートシートが表示される。

f:id:tomute:20140725234439p:image

【おまけ】

チートシートが不要な場合には以下のようにすれば良い。

var testApp = angular.module('testApp', ['cfp.hotkeys']).config(function(hotkeysProvider) {
    hotkeysProvider.includeCheatSheet = false;
});

より詳細はGitHub - chieffancypants/angular-hotkeys: Configuration-centric keyboard shortcuts for your Angular apps.を参考に。

2014-07-05

[] VirtualBoxOpenStack (Icehouse)をインストールした時のメモ

MacBook Pro上のVirtualBoxOpenStackインストールしたのだが、その際にやった事などを以下にメモしておく。また、基本的にはOpenStack QuickStart - Icehouseに従ってインストール出来たので、特筆すべきところだけ記載する。


【利用環境】

[ノートPC (MacBook Pro)]

[VirtualBox]

  • Version: 4.3.12 r93733
  • Guest OS: Fedora 20 x86_64

[OpenStack]

  • 2014.4 Icehouse
  • RDO & Packstack

インストール時にやった事】

[仮想マシンの作成]

Fedora 20をインストールするための仮想マシンを作成。

基本的にOpenStack QuickStart - Icehouseの設定を踏襲。

[Fedoraインストール]

no titleを参考に、ソフトウェアの選択は「最小限のインストール」を選択しアドオンの「標準」にチェックを入れてインストールを実施。


[Fedoraの設定]

インストール後のOSの設定もOpenStack QuickStart - Icehouseを踏襲。

なお、DEVICEは指定せず、上記に記載以外の値で元々ファイルに書かれていたものはそのまま残した。

また、ネットワークの設定でファイル名が異なる。私の環境では以下。

/etc/sysconfig/network-scripts/ifcfg-p2p1 (vboxnet0)
/etc/sysconfig/network-scripts/ifcfg-p7p1 (vboxnet1)
/etc/sysconfig/network-scripts/ifcfg-p8p1 (NAT)

[OpenStackインストール]

OpenStack QuickStart - Icehouseを踏襲。

注意点はyum updateを実施しておかないとインストールエラーになるケースがあるということと、http://openstack.redhat.com/Quickstartを参考にSELinuxを無効にしておくという事。あと念のためiptablesもオフにした。

Packstackのインストールは以下のようにバージョン指定無しで実行した。

$ sudo yum install -y openstack-packstack

また、Packstackを利用してOpenStackインストールする際にAnswerファイルは利用しなかった。

$ packstack --allinone

インストール後にやった事】

OpenStack QuickStart - Icehouseを踏襲。

/etc/nova/nova.confの設定の所は、libvirt_typeではなくvirt_typeというキーになっていた。

インストール後にMacから以下のようにIPアドレス指定でHorizonにアクセスしようとすると404 Not Foundになった。

http://192.168.55.2/dashboard

/etc/httpd/conf.d/15-horizon_vhost.confを見るとServerAliasに192.168.55.2が追加されていなかったので、Macのhosterなどを使ってホスト名(今回はrdo)でアクセス出来るようにすると、Horizonにアクセス出来るようになった。


【参考サイト】

2014-06-14

[] Frisby.jsTips(expectJSONとexpectJSONTypesのpath指定)

REST APIのテストフレームワークであるFrisby.jsTipsを以下に記載する。

なお、Frisby.jsの導入に関しては「REST APIのテストをFrisbyで自動化する : アシアルブログ」が分かりやすい。


レスポンスとして返ってくるJSONを検証するためにexpectJSONとexpectJSONTypesという関数が用意されているが、第一引数に指定可能なpathの使い方を紹介する(pathは省略可能)。


pathによるショートカット

{
    "member": {
        "name": "tomute",
        "sex": "male"
    }
}

まず、上記のようなレスポンスが返って来るREST APIを検証する場合には以下のようなコードになる。

frisby.create('Test using a path as the paramater')
    .get('http://localhost:3000/test')
    .expectJSONTypes({
        "member": {
            "name": String,
            "sex": String
        }
    })
    .toss()

一方、pathショートカットとして利用出来るので、以下のように書ける。

ネストを浅く出来るのでコードが少し見やすくなる。

frisby.create('Test using a path as the paramater')
    .get('http://localhost:3000/test')
    .expectJSONTypes('member', {
        "name": String,
        "sex": String
    })
    .toss()

更に以下のようなjsonで"profile"部分だけを検証したいというケースにも利用可能。

{
    "member": {
        "name": "tomute",
        "sex": "male",
        "profile": {
            "job": "engineer",
            "hobby": "ski"
        }
    }
}

具体的には以下のような形で書けば良い。

frisby.create('Test using a path as the paramater')
    .get('http://localhost:3000/test')
    .expectJSONTypes('member.profile', {
        "job": String,
        "hobby": String
    })
    .toss()

pathによる配列のチェック】

以下のようにJSON配列が含まれている場合、pathに"*"や"?"を指定することで、チェックを効率的に行う事が出来る。

{
    "member": [
        {
            "name": "tomute",
            "sex": "male"
        },
        {
            "name": "tom",
            "sex": "male"
        },
        {
            "name": "kate",
            "sex": "female"
        }
    ]
}

例えば全ての配列のTypeが正しい事をチェックする場合には以下のようなコードになる。

frisby.create('Test using a path as the paramater')
    .get('http://localhost:3000/test')
    .expectJSONTypes('member.*', {
        "name": String,
        "sex": String
    })
    .toss()

一方、配列のどこかに"tomute"がいる事をチェックする場合には以下のようなコードになる。

frisby.create('Test using a path as the paramater')
    .get('http://localhost:3000/test')
    .expectJSON('member.?', {
        "name": "tomute",
        "sex": "male"
    })
    .toss()

2014-06-08

[] EasyMock Server (node-easymock) のTips

node.jsでWeb APIのモックを簡単に作ることが出来るEasyMock Server (node-easymock) のTipsを以下に記載しておく。


【待ち受けポート番号の変更】

easymockの待ち受けポート番号はデフォルトで3000番になっているが、これを変更したい場合には以下のように-pオプションでポート番号を明示的に指定する。

$ easymock -p 3001

アクセスログの確認】

モックサーバアクセスログはTerminalでも確認出来るのだが、http://localhost:3000/_logs/にアクセスする事でも確認出来る。

f:id:tomute:20140608234501p:image


【ドキュメントのカスタマイズ】

http://localhost:3000/_documentation/ にアクセスすると、自動的に生成されたAPIのドキュメントを見ることが出来る。

このドキュメントにAPI共通の情報などを付加したい場合には、_documentationというフォルダを作成し、そこにindex.mdというファイルを置けばよい。

## ほげほげのAPI
### 注意事項
必ずx-auth-tokenヘッダにトークンを指定すること

例えば上記のような記述を書いておくと、以下のように表示される。

f:id:tomute:20140608234502p:image


バックグラウンドプロセス化】

Terminalを閉じてもEasyMock Serverを動かし続けるには、以下の様に普通にLinuxプロセスバックグラウンド化で対応。他にもっと良いやり方ありそう。

$ easymock >/dev/null 2>&1 &

【参考記事】