算術演算の英語

http://en.wikipedia.org/wiki/Subtraction から

加算(Addition) augend + addend = sum
減算(Subtraction) minuend − subtrahend = difference
乗算(Multiplication) multiplicand × multiplier = product
除算(Division) dividend ÷ divisor = quotient
累乗(Exponentiation) baseexponent = power
平方根(nth root) degree √radicand = root
対数(Logarithm) logbase(power) = exponent

Running Flask App and Celery with Supervisor on Vagrant

Flask アプリと Celery を Vagrant 環境内の Supervisor で起動させる。

Flask アプリを Flask.run() で起動するとプロセスが 2 つ立ち上がるから、Supervisor では stopasgroup = true な設定が必要。そうしないと Flask アプリを終了させたときにプロセスが 1 つ残ってしまう。

stopasgroup は 3.0b1 から使える設定だけど Ubuntu 12.04 の APT パッケージの supervisor は 3.0a8 だから使えない。Ubuntu 13.10 にしてもいいけど pip でインストールしてみた。Ubuntu 14.04 がリリースされたら APT パッケージを使う予定。

/home/vagrant/venv に vagrant ユーザで virtualenv 環境を作成する。/env とかでもよかったかも。

/home
  /vagrant
    /venv
      /etc
        supervisord.conf
      /var
        /run
          celerybeat-schedule
          supervisord.pid
          supervisord.sock
/vagrant
  /log
    app.log
    celery-beat.log
    celery-worker.log
    supervisord.log
  /myapp
  /runner.py

という構成。ログはホストで保持しておいた方が確認しやすいかなと思って。でも Ubuntu 14.04 がリリースされたら少なくとも supervisord.log は /var/log で保持する予定。Supervisor のログや PID ファイルの設定が Ansible のタスクやテンプレートや /etc/init.d/supervisor で重複するのを避けたいから。

Read More

Ansible いろいろ

changed=0 を目指す。

PLAY RECAP ********************************************************************
192.168.33.10              : ok=33   changed=0    unreachable=0    failed=0

ロケールを設定

単に

- name: ensure ja_JP.UTF-8 locale is generated
  command: /usr/sbin/locale-gen ja_JP.UTF-8

のようにすると常に結果が changed になってしまうから

- name: ensure ja_JP.UTF-8 locale is generated
  command: /usr/sbin/locale-gen ja_JP.UTF-8
  register: result
  changed_when: '"done" in result.stdout'

のようにした。さらに複数のロケールを指定したり --purge をつけたり(未確認)。

- name: ensure all locales are en_US, en_US.UTF-8 and ja_JP.UTF-8
  command: /usr/sbin/locale-gen --purge en_US en_US.UTF-8 ja_JP.UTF-8
  register: result
  changed_when: '"done" in result.stdout'

Read More

Flask・PostgreSQL・RabbitMQ・Redis・Bower on Heroku

Flask・PostgreSQL・RabbitMQ・Redis・Bower な Web アプリと Celery ワーカーを Heroku にデプロイした。

Heroku には登録済み。

まず Homebrew で Heroku のクライアントをインストールする。

$ brew install heroku

ログインして SSH キーの登録をする。

$ heroku login

アプリを Heroku に作成する。

$ heroku create {app name}

このときのディレクトリが Git の working copy で requirements.txt があれば、heroku の Git リポジトリ(作成したアプリのためのもの)が git remote に heroku として追加される。

PostgreSQL のアドオンを追加する。

$ heroku addons:add heroku-postgresql

これでユーザ名とパスワードが設定されたデータベースが出来上がる。heroku config | grep POSTGRESQL で URI が確認できる。

git push heroku master すると push 後、pip install -r requirements.txt が実行される。また PostgreSQL アドオン追加時に設定された HEROKU_POSTGRESQL_{...}_URLDATABASE_URL として使えるようになった。このような push 後の処理は heroku-buildpack-python で定義されている。

Read More

GitHub でリポジトリ名を変更

変更するには Settings から Repository Name を変更して Rename するだけ。

ヘルプによると

  • Issue
  • Wiki
  • Star
  • Follower

は全部自動的にリダイレクトされるらしい。

リポジトリ名変更後、Travis でリポジトリを Sync すると当然古いリポジトリは一覧から消えて、新しいリポジトリが表示されたので ON にした。すると、Travis の My Repositories からも古いリポジトリは消えて新しいリポジトリが表示されるようになって、古いビルド履歴も引き継がれていた。

次に、ローカルの working copy で remote を変更せずにそのままコミットを push すると

$ git --no-pager push -v origin master:refs/heads/master
Pushing to git@github.com:<old>.git
Writing objects: 100% (3/3), 302 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: This repository moved. Please use the new location:
remote:   git@github.com:<new>.git
To git@github.com:<old>.git
   9e42898..052e42e  master -> master
updating local tracking ref 'refs/remotes/origin/master'
git finished.

というかんじに問題なく push できた。ログの通り

$ git remote set-url origin git@github.com:<new>.git

のように URL は変更しておく。

Travis は push の時点でテストが走った。きちんと新しい URL を参照していた。GitHub の Service Hooks の設定も生きていた。

まとめ

  • GitHub に関しては何もしなくても動く。余計なリダイレクトを発生させないために git remote set-url した方がいい。
  • Travis に関してはリポジトリを sync して新しいリポジトリを ON にするだけ。

違った。Travis に関しては Build Status の URL も変更しないといけない。