30th Fri

Rails 2.0 RC2

Rails 2.0のRC2がリリースされましたね。正式リリースも間近のようです。

Rails 2.0: Release Candidate 2

After another batch of fixes, tweaks, and buckets of polish, we’ve prepared the hopefully last step before 2.0 can go final: Release Candidate 2. If nothing major pops up, expect the final version to land within the next week or two at the most.

早速、このブログもRails 2.0 RC2にアップデートしてみました。 今まではRC1でしたが、特に問題も無く、すんなりと移行できました。

posted by Png genki on Fri 30 Nov 2007 at 07:07

acts_as_searchable is one of the most useful plugins which's enabling us to add a fulltext search feature to our models/resources easily.

Unfortunately, it is lacking an interface to the features of searching by similarity provided by HyperEstraier.

So I wrote some codes to add an interface to exploit it. This is acts_as_searchable_with_similarity.

How to use?

Here is an example.

app/models/article.rb

   1  class Article < ActiveRecord::Base
   2    acts_as_searchable
   3  end
   4  
   5  Article.similarity_search(target_article,  :limit => 5)

posted by Png genki on Thu 29 Nov 2007 at 23:37

acts_as_searchable は、 HyperEstraier を使って簡単に全文検索を行うことができる、 非常に便利なRailsプラグインです。 しかし、HyperEstraierが提供する類似検索機能を使うインターフェイスが 用意されていないようだったので、類似検索機能を付け足しました。

オリジナルの acts_as_searchable に対する差分はこちらにあります。

使い方

まずは、オリジナルと同様に検索対象のモデルに acts_as_searchableを書き加えます。 必要に応じて適切なオプションを指定してください。

app/models/article.rb

   1  class Article < ActiveRecord::Base
   2    acts_as_searchable

あとは、以下のように類似検索を行うだけです。

   1  Article.similarity_search(target_article, :limit => 5)

ちなみに、このブログの類似記事表示機能でも使用しています。

MIT LICENSE に基づいて、修正版を再配布します。

  1. このソフトウェアを誰でも無償で無制限に扱って良い。但し、著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載しなければならない。
  2. 作者または著作権者は、ソフトウェアに関してなんら責任を負わない。

修正部分のコードもMIT LICENSEとします。

posted by Png genki on Thu 29 Nov 2007 at 23:08

SyslogLogger

SyslogLogger is a Logger replacement that logs to syslog. It is almost drop-in with a few caveats.

SyslogLoggerを使うと、railsのログを syslog に記録するように する事ができます。

インストール方法

   1  % sudo gem install SyslogLogger

普通に rubygems としてインストールできます。 続いて、アプリケーションの設定を行います。

config/environments/production.rb

   1  # SyslogLogger
   2  require 'syslog_logger'
   3  RAILS_DEFAULT_LOGGER = SyslogLogger.new 'appname'

appnameはアプリケーションを識別する名前に置き換えてください。

さらに、syslogの設定を行います。 rootになって以下の記述を書き加えます。

/etc/syslog.conf

!appname
*.*     /var/log/appname.log

修正が済んだら、空の/var/log/appname.logファイルを作成して syslogdを再起動します(例えば killall -HUP syslogd

これで、以後は /var/log/appname.log 及び /var/log/syslog に ログデータが書き出されるようになります。

posted by Png genki on Thu 29 Nov 2007 at 05:28

Hash#sliceが欲しい をさらに拡張。

指定したキーを取り除いたHashを返すHash#exceptを追加。 併せて、既存のHash#sliceHash#onlyに改名してみました。

hash_ext.rb

   1  class Hash
   2    def only(*args)
   3      args = *args if args[0].is_a? Array
   4      args.inject({}){|hash, key| hash[key] = self[key]; hash}
   5    end
   6    
   7    def except(*args)
   8      args = *args if args[0].is_a? Array
   9      args.inject(dup){|hash, key| hash.delete(key); hash}
  10    end
  11  end

使い方:

   1  cond = params.only :year, :month, :day
   2  ma = MonthlyArchive.find :all, :conditions => cond.except(:day)

posted by Png genki on Thu 29 Nov 2007 at 03:08

ドメイン境界を越えてjsで通信する方法。

Introducing CrossFrame, a Safe Communication Mechanism Across Documents and Across Domains

たぶんShootingStarで使ってる方法と同じものだと思う。

posted by Png genki on Wed 28 Nov 2007 at 16:11

ので作ってみた。

hash_ext.rb

   1  class Hash
   2    def slice(*args)
   3      args = *args if args[0].is_a? Array
   4      args.inject({}){|hash, key| hash[key] = self[key]; hash}
   5    end
   6  end

使い方:

   1  conditions = params.slice :year, :month, :day

posted by Png genki on Wed 28 Nov 2007 at 04:16

Rails 2.0(RC1)でチェックしてみたところ、以下のような構文で migration コードの生成時に追加・削除を行うcolumnを指定できるようです。

   1  % ./script/generate migration add_fullname_to_users fullname:string

この結果、生成生成されるコードは以下の通り。

db/migrate/XXX_add_fullname_to_users.rb

   1  class AddFullnameToUsers < ActiveRecord::Migration
   2    def self.up
   3      add_column :users, :fullname, :string
   4    end
   5  
   6    def self.down
   7      remove_column :users, :fullname
   8    end
   9  end

ちょっと前まで、add_xxxx_to_yyyy で yyyyテーブルにxxxxカラムを 追加するという感じの挙動をしていたのですが、それは無くなったみたいですね。 まだRC1なので最終的にどういう形に落ち着くか分かりませんが、 なかなかいい感じです。

posted by Png genki on Wed 28 Nov 2007 at 02:07

今まできちんと動作していなかった、DailyとMonthlyのアーカイブ表示の 実装を修正しました。

記事一覧表示画面の上部に表示されているカレンダーからアクセスできます。

よろしくお願いします。

posted by Png genki on Tue 27 Nov 2007 at 17:44

そうじゃないか。

posted by Png genki on Tue 27 Nov 2007 at 09:05