Windowsのvagrantのインストーラが一緒にインストールしたruby等を使うvagrant plugin 'vagrant_cmd'
を作りました。
vagrant plugin install vagrant_cmd
でインストールして
vagrant cmd
とすると
Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. [VAGRANT]C:\vagrant>
のようなプロンプトが出ます。ここでrubyとか打つとvagrant がインストールしたrubyが実行されますし、gemも実行出来ます。さらにls, gccなどのMinGWコマンドも使えます。
exit するともとの環境に戻ります。あ、当然Windwos環境でのみ動作します。ほかの環境では必要ないだろ。
なぜこんな物が必要かというとwindowsにrubyをインストールして vagrant インストールしてchef-soloインストールして、とかするとどのgemで何をインストールしたか分からなくなりそうだからです。まあ vagrant のインストールしたいろんな環境を壊すかも知れない・ちゃんとしたrubyが入ってるかどうか分からないので、まだテスト段階……
vagrant で openssh の代わりにputtyを起動したい
前回までのお話:vagrant ssh で ssh が起動させられるけど別にputtyとか開いてたらなんか魅力半減なのでMinGWのssh入れた
けどターミナルがcmdだと非常に面倒。
→ 4/22追記 下記より、 vagrant-multi-putty 使った方がいいよ!
で、sshコマンドを乗っ取ってminttyからsshを開くようにしたい。 C:\vagrant\vagrant\embedded\bin に ssh.cmd というファイル名でバッチファイル作ればいいことが分かった。
@mintty ssh %*
という内容のssh.cmd を C:\vagrant\vagrant\embedded\bin に置くと、minttyからsshが開くけどなんか日本語の扱いがおかしい。そこで下のように書き換えてputtyを利用するようにした。
なんか貼り付けられない……こちらから→ https://gist.github.com/nazoking/5352687
かなりはまりどころが多い windows に Vagrant 1.1 で sandbox ( sahara )
- 最新(今日なら 1.1.5 )をダウンロード http://downloads.vagrantup.com/
- インストール c:\vagrant\vagrant\bin\vagrant が出来ていることを確認 ( 1.2.0 だと "C:\Program Files (x86)\HashiCorp\Vagrant" にインストールされるようになったようです。以下適当に読み替えてください)←スペースがあるとmakeに失敗する! 1.2.2からは C:\HashiCorp\Vagrant にインストールされる模様なので其方にした方がいいかも
- c:\vagrant\vagrant\embedded\config.yml の内容を変更
- 明らかにインストーラーのバグな気がする>< ので1.2.2以上だと修正されてるかも
- ユーザー環境変数設定 HOME = C:\Users\nazoking 的な自分用のを設定
- これを設定しておかないと c:\.vagrant.d とか作られてはまる><
- コマンドラインから
- vargrant で出てくるコマンド一覧で sandbox が無いことを確認(ある場合は以下の手順は不要じゃないかな)
- 0.0.13 は vagrant1.1で動かない><
- C:\Users\nazoking\.vagrant.d\gems\gems\sahara-0.0.13 が出来ていることを確認
- 出来てない場合は 環境変数 HOME の設定が出来ていないと思われる。
- 中身を https://github.com/ryuzee/sahara からダウンロードしたzipに入れ替える
- vagrant を実行すると sandbox コマンドが使えることを確認する
あと個人的にはMingw + ssh 入れて vagrant ssh 出来るようにしておかないと魅力半減。vargrant がmsys入れてるんだからそれに足して欲しい……
gccがないエラーを同じ問題に困ってる人が検索出来るように貼り付け
C:\vagrant\>vagrant plugin install sahara Installing the 'sahara' plugin. This can take a few minutes... C:/vagrant/vagrant/embedded/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:556:i n `rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) C:/vagrant/vagrant/embedded/bin/ruby.exe extconf.rb creating Makefile generating generator-i386-mingw32.def compiling generator.c make: gcc: Command not found make: *** [generator.o] Error 127 Gem files will remain installed in C:/Users/skita/.vagrant.d/gems/gems/json-1.7.7 for inspection. Results logged to C:/Users/skita/.vagrant.d/gems/gems/json-1.7.7/ext/json/ext/generator/gem_make.out from C:/vagrant/vagrant/embedded/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:534:in `block in build_extensions' from C:/vagrant/vagrant/embedded/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:509:in `each' from C:/vagrant/vagrant/embedded/lib/ruby/site_ruby/1.9.1/rubygems/installer.rb:509:in `build_extensions'
Play! framework 2.0 から 2.1 に移行したときの苦労話
を見ながらやったけどそれだけじゃうまく動いてない。
- パッケージ名がいくつか変わった
- null を返していたプロパティーなどがOptionを返す用になった
- UsefulException.cause など
- cookie.maxAge など
- Html.+ が非推奨になって Html.+= に
- json の扱いが変わった
- jacksonの新しいやつ使ってたけど変更が大変そうだったので使わないようにした
- Json.toJson が使えなくなった
- multipartFormDataパーサがファイル未送信時もテンポラリファイルを作って返すようになった
- なんで・・・
- MultipartFormData[TemporaryFile].get()
- ファイルサイズなどを見て未送信かどうかを判断しないといけなくなった
- testの設定にフレームワーク縛りが入った
- この対応 http://d.hatena.ne.jp/nazoking/20121119/1353252584 (testOptions in Test := Nil) が不要に
- eclipse から インテグレーションテストすると javascript の読み込みが失敗する
- DB.withTransaction がその中でreturnしているとコミットもロールバックもしてくれなくなった
- http://togetter.com/li/465805
- withTransaction を自分で用意した
- selenium が jquery 1.7.1 をうまく実行出来ない
- 1.8.1に変えたらうまく動いてる
- scala が 2.10 になった(追記:以下勘違いかも コメント欄参照)
- for( i <- aaa) などでaaaがfilterだけ実装していれば仕えたけれどforeach等を実装しないと使えなくなった。
- then というメソッド名が警告が出るようになった
- 可変数引数の扱いが変わってるっぽい。暗黙の型変換がうまくいってない→明示的に変換するようにした
- テストが落ちる socket closedとかいって落ちる(3/29追記)
- http://d.hatena.ne.jp/xuwei/20130207/1360203782
- Build.scalaに追記
- javaOptions in Test ++= Seq("-Xmx1024m","-XX:MaxPermSize=128m")
あと Enumerator.fromCallback が警告が出て Enumerator.generateM をつかえといってくるけどよくわからない・・・(;´Д`) Enumerator.outputStream が使いやすそう。
svnのプロジェクトをgithubにコピーし続ける
svnで公開されているオープンソースプロジェクトをgithubで追跡し続けたい。
変更したい場合gitの方が便利なので。なんかそういうサービス・プログラム既にありそうだけど見つからなかったです……(あったらそっち使うので誰か教えて……)
今回は flashからxmpp/jabberが使える xiff というプロジェクトをやってみる。
svn から git にclone
mkdir xiffsync # 作業用 git svn clone -s http://svn.igniterealtime.org/svn/repos/xiff cd xiff/
標準的な構成だったので -s そのまま使えた。
このままだとtagがブランチになっているので、それぞれのブランチにタグを打つ
for i in `git branch -r|grep tags|sed 's/ tags\///g'`; do git tag $i tags/$i ; done
適当だけどこんな感じでまあ動いたので。
github に push。github上ではリポジトリが出来ている前提
git remote add origin git@github.com:nazoking/xiff.git
定期化
リポジトリにpush出来るだけの公開鍵を作る
cd .. # xiffsync に戻る ssh-keygen -f github_deploy_key cat github_deploy_key.pub
これをリポジトリの設定のDeploy keysに登録する。
git でこの鍵を使うためのsshラッパー xiffsync/git_ssh.sh
#!/bin/bash BASEDIR=$(dirname $( readlink -f $(which $0) )) ssh -i $BASEDIR/github_deploy_key "$@"
cron に登録するためのバッチ xiffsync/github_sync.sh
#!/bin/bash -x BASEDIR=$(dirname $( readlink -f $(which $0) )) cd $BASEDIR/xiff git svn rebase GIT_SSH=$BASEDIR/git_ssh.sh git push origin master
この xiffsync/github_sync.sh を定期的に動かせば大丈夫なはず……?
TODO:(誰か教えて)
Redmineのチケットのステータスは「〜待ち」にすべき
チケットは「それをすることによって何が起こるか?それがされていないために何ができないか?」が大事だ。何をするか?はチケットのタイトルに書かれる。「何ができていないか?」がわかるようにした方がいい。
Redmineのデフォルトのステータスは次の物だけれど
- 新規
- 新たに登録されたもの。作業は未着手。
- 進行中
- 担当者が作業に着手。
- 解決
- 担当者の作業が終了。テスト/レビュー待ち。
- フィードバック
- 差し戻し。作業が完了したものについてテストやレビューを行った結果、修正や追加の作業が必要となったもの。
- 終了
- 作業終了。
- 却下
- 作業を行わずに終了。採用されなかった新機能の提案、バグとして報告されたが修正する必要のないもの(報告者の誤認など)
大抵「新規→終了」という流れになる。なぜなら「終了」以外に変更する意味があまり見いだせないからだ。また状況とステータスが合致しているのかどうかわかりにくい。チケットは復活したもの以外は常に新規のチケットであるし、終了するまでは常に進行中である。解決はテストが終了するまでは解決していないので利用されない。このようにするとすっきりする。
- 作業担当割り当て待ち
- 作業完了待ち
- レビュー待ち
- デプロイ前テスト待ち
- デプロイ待ち
- デプロイ前差し戻し対応待ち (デプロイ前テストで発見されたバグなど)
- デプロイ後テスト待ち
- デプロイ後修正完了待ち (デプロイ後テストで発見されたバグなど)
- 終了
ステージングと本番があるなら「ステージングデプロイ待ち」「本番デプロイ待ち」のように分けた方がいいだろう。
さらに「何が出来ていないか?」に対して「出来ていない」のか「出来ない」のかがわかるように「タスクのブロック」を使えるといいんだけどあんまりUIがいけてないしブロックされていても一覧で確認出来ないので……
play2.0のフォームテンプレートヘルパーの表示項目を細かく制御する
play2.0 の scala template のフォームテンプレートヘルパーは便利なんだけど飾りが多すぎてちょっとルールから抜けようとすると結構大変
とりあえずこんなのを用意しておけば
fieldOnly.scala.html
@(elements: views.html.helper.FieldElements) @elements.input
使い方
views.html.helper.checkbox(form("delete"))(fieldOnly,implicitly[Lang])
出力
<input type="checkbox" id="delete" name="delete" value="true" >
他にFieldElementを生成するだけのコードとかも用意しておいた方が便利そう
import play.api.templates.Html import views.html.helper.FieldElements import views.html.helper.FieldConstructor import play.api.data.Field /** id属性を計算する */ def getId(field: Field, args: Seq[(Symbol, Any)]): String = args.toMap.get('id).map(_.toString).getOrElse(field.id) /** フィールドのみを表示する FieldConstructor */ object fieldOnly extends FieldConstructor { def apply(elements: FieldElements): Html = elements.input } /** FIeld から FieldElement型にする */ def fieldElemet(field: Field, args: (Symbol, Any)*)(implicit lang: play.api.i18n.Lang): FieldElements = FieldElements(getId(field, args), field, Html.empty, args.filter(arg => !arg._1.name.startsWith("_") && arg._1 != 'id).toMap, lang) /** フィールドに対するラベルの表示 */