5月 21 2009

最近の購入物 – Railsデプロイ、I’ve Sound、…

Published by HoLY under 購入記録

Tags: , ,

No responses yet

1月 27 2009

mislav-will_paginate になっていた

Published by HoLY under tech

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:

No responses yet

12月 08 2008

Rails 2.2.2 と RubyGems 1.3.1

Published by HoLY under tech

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: ,

No responses yet

11月 26 2008

acts_as_taggable_on_steroids と will_paginate を同時に使う

Published by HoLY under tech

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: , ,

No responses yet

6月 01 2008

capistrano メモ – ROLES,HOSTS

Published by HoLY under tech

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: ,

No responses yet