2008/09/23

rspecっていいなぁ

ほんとにほんのちょっとだけ、チュートリアルにしたがってモデルでしか使ってないけど、、、「RSpecには夢があるっ」っていうのは同意。ここまで感心したソフトウェアはなかった。

語彙が、ここまで思考に影響を与えるかというのを再認識させられた。

そしてプログラムをとことんまで自然な英語にしようという心意気。Railsで一番こころをうたれたのもそこだけど、さらに上を行く感じだ。

プログラムじゃなくてほんとに仕様を記述している。そしてそれが仕様であり、実際動く試験になるのだから素晴らしい。すごい綺麗。

spec -fsの結果をみると心躍る。まさしく仕様書!

客がit 'ほげほげがぴよぴよ'とspec書いて中を埋めていけば、設計が終わる世界がくるといいなぁ。

BDDというかちゃんと仕様を決めてとりかかる。Spec Driven Development。あれ?すごい普通な気がする。いかに仕様がきちんときめきれてなかったという裏返しなのか?

itブロックの中でデータというかそのコンディションを用意するまでがメンドイというか冗長になりがち。何とかならないものか。

モデルは開発者よりで、すごいストンと落ちるんだけど、客が気にするのってもっと上位な見た目とか振る舞いなんだよね。そこがどこまで記述できるか。そこを見極めたい。そして客がかける要求(Requirement)とSpecの間を埋められたらすごい面白いと思う。

その要求にはコレだけのSpecがいるのでおいくら万円とか。

少なくともSpecがどれだけ落としたらちゃんとCodeに落とせるか、いいかの良い指標になりそうな気がする。

とにかくRSpecは楽しいから使っていこうと思う。

2008/09/21

Rails 2.1 に rspec を入れる。

どうもRSpec on Railsの入れ方だと2.1に対応していないバージョンが入るらしく、DEPRECATION WARNINGがでる。

こっちのを入れるとエラーがでない。要Git

Rails 2.1ならば以下ので入れる。

  1. script/plugin install git://github.com/dchelimsky/rspec.git
  2. script/plugin install git://github.com/dchelimsky/rspec-rails.git
  3. script/generate rspec

使い方はRSpec on Railsと変わっていないようだ。

PostgreSQLにTCP/IP接続する

Windows側からUbuntu上のPostgres8.3.3にpgAdminでつなごうと思ったらつなげなかった。

デフォルトだと、TCP/IPでつなげないらしい。そーいえばUnixDomainSocketがどーのとなっていたな。

ということで設定。

  1. /etc/postgresql/8.3/main/postgresql.confをエディタで開く
  2. #listen_addresses = 'localhost'のコメントアウトを外して保存
  3. /etc/postgresql/8.3/main/pg_hba.confをエディタで開く
  4. host all all 接続元IPアドレスとマスク trustを追記
  5. sudo /etc/init.d/postgresql-8.3 reload

古い記事が多くて困るのだが、-iオプションはもういらないらしい。あの手の解説記事には作成日と更新日をつけるべきだ。その点Blogは日付が必ずつくのでよい。ただ、一連の解説記事がばらばらになり、一覧性が悪いという欠点がある。そこはCMSに軍配が上がる。

pgAdminから接続するときは

  • 名前:任意
  • ホスト:サーバのIP
  • Port:Postgresのポート(デフォなら5432 postgresql.confで変更可能)
  • SSL:必要(デフォだとonになっている)
  • DBメンテナンス:Postgresの管理ユーザ(通常はpostgres)
  • ユーザ名:DBのユーザ
  • あとは良しなに。

UbuntuのSubversionを1.5にする

Windows側のSubversionを1.5.2にしてしまったがために、railsのpluginをUbuntu側で操作しようとすると、Subversionのバージョンが古いとか怒られた。

ということで、UbuntuのSubversionをアップグレードしようとしたが、普通だと1.4のパッケージしか入らない。

あまり詳しくないのだが、hardy-backportsとかいうところに1.5.1のパッケージがあるようだ。

Synapticを開いて、リポジトリにここに書いてあるURLを追加する。

deb http://archive.ubuntu.com/ubuntu hardy-backports main universe multiverse restricted

再読み込みしてくれとダイアログがでるので、言われるままに再読み込みし、subversionで検索。最新バージョンが1.5.1になっているのでチェックしてバージョンアップ

なんとなくバージョンアップに成功。script/pluginでも怒られない。

よくわからないものは触るべきではないのだが、とりあえず。

TortoiseSVNのオーバーレイ

VMWare上のUbuntuにプロジェクトをおいて、Samba共有かけてホストから操作しているんだけど、そのときTortoise SVNのオーバレイ(Commit済みはチェックマークとかのアイコン)が表示されなかったのでメモ。

理由は単純で、Tortoise SVNの設定でネットワークドライブでオーバーレイを表示しないようになっていたから。

直し方

  1. Explorerで適当なところを右クリック→Tortoise SVN→Settings
  2. Icon Overlays
  3. Drive TypesのNetwork drivesにチェックをつける。

2008/09/13

UbuntuのPostgresqlメモ

先日ubuntuにインストールしたPostgresだが、使い方がよくわからないので、調べたメモ

psql --versionで8.3.3だったので、マニュアルはこれ参照。

インストール手順だとmake installのあと、initdbとかいろいろやっているけど、apt-getした場合はすでに終わっている。というかDBが立ち上がっている。

psコマンドで出てくる引数から、次のような設定になっているみたい。

  • initdb先:/var/lib/postgresql/8.3/main
  • 設定ファイル:/etc/postgresql/8.3/main/postgresql.conf

起動はinit.dのスクリプトとrc4dにあるスクリプトっぽい

/etc/init.d/postgres-8.3 start | restart | stopでOK

RedHat系ばかり使っていたからDebian系の構造がいまいちわからない。

rails+postgresql-prで使おうと(rake db:create:all)したらエラー

No such file or directory - /tmp/.s.PGSQL.5432

ubuntuのこのファイルの出力先が/var/run/postgresqlになっている。
上記設定ファイルの「unix_socket_directory」を'/tmp'にすればよい。

※database.ymlのhost:に/var/run/postgresqlを指定すればよいとも書いてあるんだけど、うちでは動作せず
と思ったら、db:migrateはこっちが効くようだ。めんどい。

FATAL C28000 MIdent authentication failed for user "office" Fauth.c L1003 Rauth_failed

権限が足りないらしい。
/etc/postgresql/8.3/main/pg_hba.confにDomainSocketのアクセスを追加
とりあえず動かすにはlocal all all trustとか追記すればよい。

今はauto vacuumなんてあるんだなぁ。

2008/09/10

ubuntuでruby開発環境を作る

作ってみたのでコピペ。慣れると20分くらいかも

ubuntuは初めて触ったけどEeePC買って入れてみたくなった。

今回はVMWare上にubuntuをGuestOSとして立てて開発環境を作ります。
HostOSはWindows Vista
VMWareは導入済みとする。うちはPlayerではなくServerのほうを使っている。

Ubuntuをいれる

  1. ここから仮想マシンをダウンロードする。(2008/09/09現在 8.04が最新。来月8.10がでるっぽい)
  2. 任意のフォルダに展開して、Ubuntu.vmxをダブルクリックして開く。
  3. メモリは512ぐらいあればいいかも?足りなかったら調整して。
  4. GuestOSを起動
  5. ユーザ情報とキーマップを適当に設定。
  6. ログインできたら、システム→システム管理→アップデートマネージャでアップデート
  7. GuestOS再起動

Ruby

ポートを待てないので最新版をソースから入れます。

  1. システム→システム管理→Synapticでzlib1g-devとlibssl-devを入れる。
    (これがないとrubygemsが入らないのとrailsが起動しない)
  2. RubyのDLページから最新版のURLをコピー(2008/09/09現在 ruby 1.8.7-p72)
  3. wget
  4. tar jxf ruby-1.8.7-p72.tar.bz2
  5. cd ruby-1.8.7-p72
  6. ./configure
  7. make
  8. sudo make install

でruby -vでバージョン情報が出ればOK

RubyGems

  1. RubyGemsから最新版のURLをコピー(2008/09/09現在1.2.0)
  2. wget
  3. tar zxf rubygems-1.2.0.tgz
  4. cd rubygems-1.2.0
  5. sudo ruby setup.rb

Gems

Rails 2.1.1とPostgreSQL接続用のGemをいれる。

Postgresなのは今回開発のターゲットがそうだから。MySQLが嫌いだからではないとおもう。

あんまり詳しい使い方を知ってるわけではないのでWeb情報頼り

  1. sudo gem install rails postgres postgresql-pr

Subversion

Subversionもいれる

  1. システム→システム管理→Synapticでsubversionをいれる。

PostgreSQL

  1. システム→システム管理→Synapticでpostgresqlとpgadminをいれる。
  2. sudo passwd postgresで管理ユーザのパスワード設定

必要なDBユーザは次のようにして作ります。

  1. su - postgres
  2. createuser -P hoge_development
  3. Enter password for new role: 面倒なのでパスワード無し
  4. Enter it again:
  5. Shall the new role be a superuser? (y/n) y

これであとはRailsコマンドなりで作れると思います。

他のEmacsとかZshとかScreenは適宜おこのみで。

補足

依存関係が足りない

rubyのmake前にopensslを入れ忘れたりするとエラーになる。

そのときはapt-getしたあとrubyのソースディレクトリで

  1. cd ruby-1.8.7-p72/ext/openssl
  2. ruby extconf.rb
  3. make
  4. sudo make install

で良いみたい。

Rubyの再インストール

上記の依存関係の直し方2:再インストール

  1. make clean
  2. make
  3. sudo make install

activerecord-postgresql-adapter

postgresだけだと動かずにactiverecord-postgresql-adapterをいれろといわれるけど、そんなのないので postgresql-pr を入れるといいみたい