1月
27
2009
Rails 話。しかも今さらの。
Rails のpaginate プラグインの will_paginate は、最新がいつのまにか mislav-will_paginate になってた(若干語弊あり)。インストール方法もかわってた。
GitHub を rubygems に登録してから、gem install する。
$ sudo gem sources -a http://gems.github.com/
$ sudo gem install mislav-will_paginate
will_paginate は開発止まってるようなので、こっちに移行した。
Tags: rails
12月
08
2008
Rails 2.2 にアップデートしたら
$ ./script/console
Rails requires RubyGems >= 1.3.1 (you have 1.2.0). Please `gem update --system` and try again.
などと言われる。しかし、そのままやってもダメらしい。
$ sudo gem update --system
Updating RubyGems
Nothing to update
rubygems-1.2.x 以下の場合、
rubygems-update パッケージをインストールしたのち、update_rubygems コマンドを実行する必要がある。
$ sudo gem install rubygems-update
$ sudo update_rubygems
rubygems-1.3.1 のリリースアナウンスはこちら。
Tags: rails, ruby
11月
26
2008
Rails2 で acts_as_taggable_on_steroids でタグ付けしたモデル(ここでは Entry とする)のリストを will_paginate で paginate する方法。
以下のようにすると、全該当 Entry を find(:all) してしまうので、精神衛生上いまいち。(ということにしておく)
Entry.find_tagged_with('rails').paginate(:page => params[:page], :per_page => 30)
find(:all) することなしに、こんな風に書けるようにするには。
@pages = Entry.paginate_tag 'rails',
:page => params[:page],
:per_page => 30
lib/paginate_tag.rb をこんな内容で作り、environment.rb で読み込む。
module ActiveRecord
module Acts #:nodoc:
module Taggable #:nodoc:
module SingletonMethods
def count_tagged_with(name, *args)
options = find_options_for_find_tagged_with(name, *args)
options.delete :select
# この辺はもうちょいスマートにいけないかな?
options.delete :page
options.delete :per_page
options.delete :total_entries
count(options)
end
def paginate_tag(name, *args)
count = count_tagged_with(name, *args)
options = args.last.is_a?(Hash) ? args.pop.symbolize_keys : {}
paginate_tagged_with(name, {
:per_page => 30,
:total_entries => count,
}.merge(options))
end
end
end
end
end
ただしこのやり方では find(:all) はしないかわりに COUNT (*) クエリを別途呼んでしまうので諸刃の剣。どっちが速いかは場合によるだろう。
ていうか cache_fu してしまえば一緒なのかも。(要追試。)
will_paginate は paginate_xxx メソッドを呼ぶと内部で find_all_xxx を使ってくれるのだが、素直に paginate_tagged_with するだけだと、count の正しい値が取れない。というか count の値を正しく取れることはあるんだろーか…。
Tags: acts-as-taggable-on-steroids, rails, will-paginate
6月
01
2008
capistrano で deploy する際、あるホスト、あるいはあるロールだけに適用させたい場合はこうする。
“hoge.example.com” というホストに対し deploy:setup
$ cap deploy:setup HOSTS=hoge.example.com
:role => :web なホストに対し deploy:setup
$ cap deploy:setup ROLES=web
ここで指定するものは「,」 区切りで複数指定できる。
$ cap deploy:setup ROLES=web,db
HOST 指定に関しては、user および port を同時に指定できる。
$ cap deploy:setup HOSTS=username@fuga.example.com:port
後からホスト付け足す時にいちいちハマらないように。
Tags: capistrano, rails