nginx-で-cache-を使う

公開日時 okkez Fri, 18 Dec 2009 14:41:00 GMT

nginx だけで簡易な cache 機構があるようなので doc.okkez.net で使ってみた。

もう一つ memcached にキャッシュするやつもあるみたいだけど、簡易でいいのでこれを使う。

設定は簡単で、Debian の場合は以下のような感じでした。

nginx.conf
# http コンテキストに追加 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m;

リファレンスにあるサンプルのままです。 パラメータの意味は前から順に、キャッシュを作成するパス、キャッシュを作成するパスに作成するサブディレクトリの深さ、キャッシュの名前と有効期限。

コメントはありません | トラックバックはありません

Rails の generator gem のテスト方法

公開日時 okkez Fri, 18 Dec 2009 14:39:00 GMT

自分で Rails の generator gem のテストを書いてみたんだけど、どうもしっくり来ない。

参考にしたのはここ。

作ってた engines はこれ。

やりたかったことは以下のとおり。

  • Rails Engines なので基本的には Rails アプリケーションとしてテストしたい
  • generator は engines として使うときに必要なファイルを生成するためのものなので独立してテストしたい
  • rake test でちゃんとテスト出来れば OK

で、冒頭の Rails Guides を参考にテストを書いてみたけどちゃんと動かなかったので Rails のソースを読んでみた。 読んでみて分かったのは以下のこと。

  • Rails::Generator::Scripts::Generate#run でファイルを生成する先は指定できる
  • けど、generator をどこから探してくるかは指定できない
  • RAILS_ROOT が定義されていると RAILS_ROOT/lib/generators や RAILS_ROOT/vendor/generators などから探してくれる
  • 他には既にインストール済みの generator からも探してくれる
  • RAILS_ROOT/generators は見てくれない

作っているのは engines gem なのだから RAILS_ROOT/generators も見てほしいんだけど、それはやってないらしいので、ここでは RAILS_ROOT/lib/generators に symlink を張ることにした。 一応、これでちゃんと動いているみたいなのだけど、setup で symlink 作成して teardown で symlink を削除したりしてるのがちょっと気持ち悪い。

Rails Guides にも書いてあったとおり generator を提供している多くの Gem は generator 自体のテストは書いていない。(cucumber や rspec を参考にしたかったんだけど書いてなかった。)

もう一回やりたかったことをまとめるとこうなる。

  • Rails Engines なので基本的には Rails アプリケーションとしてテストしたい
  • generator は engines として使うときに必要なファイルを生成するためのものなので独立してテストしたい
  • 既存の generator を読み込まずにテストしたい (開発中の Gem と同名の Gem が入っていてもいいように)
  • rake test でちゃんとテスト出来れば OK

あ、コードは github に全部上がっているので見てください。

みんな generator のテストはあんまり書かないものなのかなぁ?

Posted in ,  | タグ ,  | コメントはありません | トラックバックはありません

Rails Engines なプラグインを書いてみた

公開日時 okkez Fri, 18 Dec 2009 14:38:00 GMT

Rails Engines なプラグインを書いてみたら、いくつかハマったポイントがあったので未来の自分のために記録しておく。

  1. スタイルシートや画像などが読めない
  2. マイグレーションファイルをどうしよう
  3. プラグインがロードできない
  4. Engine 側で使っている Gem を rake gems などで扱いたい

大体この四つくらいかと。それ以外は普通にアプリケーションを作れば OK

スタイルシートや画像などが読めない

これは簡単で、本家でも解説されてた。 Rake タスクを作ってコピーするだけ。

マイグレーションファイルをどうしよう

これも簡単。本家では、プラグイン側のマイグレーションを実行する方法がまだ無いから仕方ないと書かれていた。 Rake タスクを作ってコピーすればいい。タイムスタンプなマイグレーションを使っている場合はこれで問題ないはず。

プラグインがロードできない

これは調べるのに時間がかかったけど分かってみれば簡単だった。 plugin_root/init.rb や plugin_root/rails/init.rb では Rails::Initializer.run のブロックパラメータの config が見える ので(正確には違うけど)それ経由で以下のようにしておくとよいみたい。

plugin_root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
config.plugin_paths << File.join(plugin_root, 'vendor/plugins')

Engine 側で使っている Gem を rake gems などで扱いたい

プラグインと同様、init.rb 内で config.gem すれば良い。

Posted in ,  | タグ ,  | コメントはありません | トラックバックはありません

org-mode を使ってみた

公開日時 okkez Fri, 18 Dec 2009 14:36:00 GMT

るびきちさんのところを見て、良さそうだと思ったのでやっと org-mode を使ってみている。

この辺。

今のところ、 org-remember を使って TODO 管理しかしていないけど、テキストファイルに 書くだけでいいというのが気に入っている。

複数マシン間のデータの共有には自宅サーバに git レポジトリを用意して共有するようにしているが、 公開しても問題ないデータなら gits や github でもいいかも。 # dropbox とかでもいいかもしれないけど、なんか信用できないので自分の自由になるところに置いてる。

上記三つ目のリンク先で紹介されている祝日表示の方法がよくわからなかったので 、試行錯誤した結果 ~/memo/agenda.org に以下のように書くとうまく表示できた。

* Calendar
%%(org-calendar-holiday)
* Inbox
** TODO ほげほげをする

で、わからないことがいくつかあって未解決。

  • TODO -> DONE に変更したあと非表示になって欲しいのだけど今のところ方法がわからない
  • deadline を設定したいのだけどカレンダーは表示されるが、エラーが出て設定できない
Debugger entered--Lisp error: (invalid-function increment-calendar-month)
  increment-calendar-month(7 2009 -1)
  calendar-mark-weekend()
  run-hooks(today-visible-calendar-hook)
  byte-code("....."
  generate-calendar-window(7 2009)
  calendar-basic-setup(nil)
  calendar()
  byte-code("....
  org-read-date(nil to-time nil nil nil nil)
  byte-code(".....
  org-add-planning-info(deadline nil closed)
  org-deadline(nil)
  call-interactively(org-deadline)
  • key-chord.el で設定した同時押しが全く効かなくなることがある (起動直後は効く。時間が経つと効かなくなる。)

Posted in  | タグ  | コメントはありません | トラックバックはありません

grub2 で boot しなくなって焦った件

公開日時 okkez Fri, 18 Dec 2009 14:35:00 GMT

昨晩、メインマシンをなんとなく再起動したら以下のようなエラーメッセージが出て起動しなくなった。

error: you need to load the linux kernel first.

久しぶりにこんな状態になったのでテンパった。 さすが sid だ。油断してるとハマる。

LiveCD でなんとかしようとして KansaiRubyKaigi02 で使った LiveCD を使ったんだけど rescue モードで起動しても chroot できない。何でだろうと思ったら、アーキテクチャが違っていた。対象のマシンは x64 なのに LiveCD は x86 向け なのでした。

仕方が無いので新しいネットワークインストールの CD を焼いて (もちろん amd64 の) rescue モードで chroot して grub-legacy を無理矢理インストールして一応起動するようにはできた。

その後、2ch の Debian スレなどを見てみると同じ問題でハマっている人がいて、その人が見つけてきた BTS があったので読んでみるとまったく同じ問題でした。

Posted in  | タグ  | 1 comment | トラックバックはありません

そろそろるりまを使ってみませんか?

公開日時 okkez Fri, 18 Dec 2009 13:32:00 GMT

この記事は Ruby Advent Calendar jp: 2009 : ATND の 18 日目です。前日は @tad さん でした。

愛用しているものの一つに るりま があります。 みなさんはもうお使いですか?

まだの人は以下の説明を読んでぜひ使ってみてください。

利用方法はいくつかあるので順番に紹介していきます。

web ブラウザを使って見る方法

http://doc.okkez.net/ にアクセスします。3 カラムになっていて左から順番に、BitClust, Static HTML, Download となっています。BitClust はるりまプロジェクトで作ったリファレンスマニュアルを見るためのウェブアプリケーションです。 doc.okkez.net では nginx + thin で動かしています。nginx がキャッシュするようにしているのでまあまあの速さで動くと思います。

Static HTML はあらかじめプログラムで生成した HTML ファイルを置いています。ウェブアプリケーション版とは少しレイアウトが異なりますが内容は同じです。参照したいクラスやメソッドが既に決まっている場合に使うと高速に参照することができます。ウェブブラウザのページ内検索機能を使用すると快適に閲覧できるでしょう。

Download は月一回肉の日(毎月29日)に作成したスナップショットを置いています。http://www.ruby-lang.org/ja/man/archive/ にも同じものを置かせていただいています。

ダウンロードしたアーカイブを使用する方法

  • http://www.ruby-lang.org/ja/man/archive/
  • http://doc.okkez.net/archives/

どちらかから、ダウンロードしたアーカイブを適当な場所に展開します。 アーカイブの中には以下のようなものがあります。

  • bitclust/ ライブラリ
  • db-1_8_7/ Ruby1.8.7 向けのデータベース
  • db-1_9_1/ Ruby1.9.1 向けのデータベース
  • readme.html このアーカイブの説明
  • refe-1_8_7 Ruby1.8.7向けの refe
  • refe-1_8_7.cmd Windows 用の Ruby1.8.7 向けの refe
  • refe-1_9_1 Ruby1.9.1 向けの refe
  • refe-1_9_1.cmd Windows 用の Ruby1.9.1 向けの refe
  • server.exe Windows 用の実行ファイル
  • server.exy server.exe を作るための exerb のレシピファイル
  • server.rb *nix などで使用するスクリプト

データベースというのは、指定したバージョン向けに前処理を施したテキストファイル群のことです。

このディレクトリにパスを通して使うのが一番簡単ですが、適当なスクリプトを書いたりするのもいいでしょう。例えば、以下のような感じで書くといいのではないでしょうか。

#! /bin/sh
DOC_BASE=$HOME/ruby-refm
exec ruby -Ke -I $DOC_BASE/bitclust/lib bitclust/bin/refe.rb -d $DOC_BASE/db-1_8_7 "$@"

Windows な人は *.cmd を参考にしてバッチファイルを書くといいのではないでしょうか。

また server.exe というファイルがありますが、Windows を使っている人はこれをダブルクリックすると、ローカルで web server が起動して、自動的にウェブブラウザが起動してリファレンスマニュアルを表示します。ローカルで動いているのでネットワークにつながっていないときでも使用できます。

ダウンロードした chm ファイルを使う方法

  • http://www.ruby-lang.org/ja/man/archive/
  • http://doc.okkez.net/archives/

先ほどと同様に、ダウンロードします。 chm はバージョン別になっているので自分が使いたい方をダウンロードすればいいでしょう。1.8.7, 1.9.1 以外のバージョンを使いたい人は、自分で chm ファイルを作るといいでしょう。(ここでは説明しません)

Windows Vista 以降の人は、ダウンロードしたファイルをダブルクリックしたときに出てくる警告ダイアログのチェックボックスを外すとちゃんと見られるはずです。

Windows を使っていない人はそれぞれ自分の好きな chm viewer をインストールして使ってください。意外と色々あります。

まとめ

個人的におすすめなのはコマンドラインから使用する refe です。すごく速いです。 とりあえず使ってみてください。古いリファレンスには書いていないこともたくさん書いてあります。 足りない部分はありますが、古いリファレンスよりはかなり進化しています。使わないと損です。 そして、使ってフィードバックをください。みなさんのご協力をお待ちしています。

明日は、たこ焼き仮面の中の人ではないかと噂されているあの人が書きます!

Posted in  | タグ ,  | コメントはありません | トラックバックはありません

Hikifarm on Rack

公開日時 okkez Wed, 25 Nov 2009 12:48:00 GMT

Hikifarm on Rack の対応をしてみました。

  • https://svn.sourceforge.jp/svnroot/hiki/hiki/branches/rack

やっと Hikifarm on Rack を実装出来たので rack ブランチにコミットしてみました。 まだ足りない部分はいくつかありますが、余裕のある人は試してみてください。 コードやファイル名についてもコメントをください。

使い方

  • misc/hikifarm/hikifarm_conf.rb を Hiki のインストールディレクトリにコピーする
  • hikifarm_conf.rb を環境に応じて書き換える
  • 必要っぽいディレクトリを作成しておく
  • 以下のコマンドを実行する
 $ rackup hikifarm.ru

注意

  • Hikifarm, Hiki ともにデフォルトで UTF-8 で動作します
  • 古い misc/hikifarm/index.cgi は変更してませんが使えないと思います

主な変更点

  • misc/hikifarm/index.cgi から hiki/farm.rb, hiki/farm/{config,dispatcher,manager,page,wiki}.rb に分離
  • Hikifarm の内部的にコードを整理した
  • Hiki::Config.new に hikiconf.rb のパスを指定できるようにした
  • UTF-8 化

TODO (把握してるものだけ)

  • Hikifarm の RSS 出力
  • 複数の wiki を作成したときの動作確認
  • attach の動作確認を行う
  • テストを書く
  • リファクタリング

Posted in ,  | タグ ,  | コメントはありません | トラックバックはありません

annotate_models_with_index

公開日時 okkez Wed, 04 Nov 2009 15:14:00 GMT

annotate_modelsにindexの情報を付加する - Hello, world! - s21g

こちらで公開されてたものに少し気になるところがあったので修正してみたのが以下。

okkez’s annotate_models_with_index at master - GitHub

修正ポイントは

  • trailing spaces を書き込まないようにした
  • magic comment を保存するようにした

です。

よかったら使ってみてください。

Posted in  | タグ ,  | コメントはありません | トラックバックはありません

Debian sid with nvidia

公開日時 okkez Thu, 15 Oct 2009 05:49:00 GMT

Debian sid を使っているとたまに Kernel を更新する必要がある。単純に Kernel を更新してしまうと X が起動しなくなってしまい困る。そのときの更新方法をいつも忘れるので自分用のメモとして書いておく。

# 更新後の kernel で起動する
$ sudo m-a auto-install nvidia
$ sudo aptitude update && sudo aptitude safe-upgrade # nvidia-glx を更新する
$ sudo shutdown -h -r now

手順自体は上記の通りいたって簡単。更新後の kernel で起動してからモジュールを入れ直すだけ。

Posted in ,  | タグ ,  | コメントはありません | トラックバックはありません

I got a new machine.

公開日時 okkez Fri, 18 Sep 2009 15:08:00 GMT

自宅用に新しいマシンを組んだので適当に記録しておく。

  • CPU: AMD Phenome II X4 905e
  • MEM: DDR3 1333MHz の 2GB*2 * 2
  • M/B : Gigabyte MA770T-UD3P
  • G/B: Gigabyte GeForce 9600GT
  • HDD: seagate の SATA2 の 500GB
  • ケース : Cooler Master Sileo 500
  • 電源 : 超力 500W
  • 光学ドライブ: pioneer のバルク

こんな感じで組んで 80k+ でした。

あとディスプレイが iiyama の ProLite E2608WS で \26,800- くらいでした。

ちょっとインストールに手間取ったけど、動きはじめてからはすごく快適です。 Let’s note でちょっともたついてた勉強会の資料作成もこのマシンなら一瞬です。 ロードアベレージが 3.0 を越えても操作感がほとんど変わらないのはすごいです。

あとは仮想マシンを入れて Android の開発環境を作ればいいだけです。

Posted in  | コメントはありません | トラックバックはありません