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

標準のrakeタスクが便利です。最近教えてもらった/気づいたものもあるので一覧にしてみました。
db:create, db:reset, db:version, rake:routesなんかは最近知ったやつです。
時々rake --taskで便利なタスクがないか探してみるのもいいかもしれません。

   1  rake db:create  
   2  rake db:migrate VERSION=1  
   3  rake db:reset
   4  rake db:test:clone  
   5  rake db:version
   6  rake rails:freeze:edge REVISION=8220  
   7  rake routes  

よく見たらこんなのもあった。使ってみよう。

   1  rake test:uncommitted          # Test changes since last checkin (only Subversion)

posted by Png satoko on Thu 29 Nov 2007 at 07:36

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

   1    map.resources :users
   2    map.resource :session

routes.rbに出てくる、map.resource。綴り間違い??とひそかに思っていたらちゃんとありました。
map.resourceについてヘルプを見てみます。

Creates named routes for implementing verb-oriented controllers for a singleton resource. A singleton resource is global to the current user visiting the application, such as a user‘s /account profile.

単数コントローラ名でパスを提供する場合に使えるようです。

  • a singular name is given to map.resource. The default controller name is taken from the singular name.
  • To specify a custom plural name, use the :plural option. There is no :singular option
  • No default index, new, or create routes are created for the singleton resource controller.
  • When nesting singleton resources, only the singular name is used as the path prefix (example: 'account/messages/1')
  • 単数形を使ったリソースを提供できます
  • :pluralオプションを使えば、複数を使うこともOK。:singularオプションはありません。
  • index, new, createのroutesは作られません
  • 入れ子で単数形resourceを使っている場合、prefixには単数形が使われます
    ex 'account/messages/1'

ヘルプにある生成されるというパスと私の環境のrake routesで表示されるパスが異なるようなので使用しているrailsで確認することが必要があるように思います。

posted by Png satoko on Wed 28 Nov 2007 at 05:51

ので作ってみた。

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
Contents
Rails 2.0 RC2
acts_as_searchable_with_similarity
acts_as_searchableで類似検索を行う方法
よく使うrakeタスク一覧
Railsアプリケーションのログをsyslogに記録する方法
Hash#except and Hash#only
CrossFrameという技術
map.resourcesとmap.resourceの違い
Hash#sliceが欲しい
migrationコードの生成時に変更するcolumnを指定する
Comments
瀧内元気: MacOS版は以下にあります * [genki/ViMouse](https://githu... '23-1
KingofSmack: Here also good reads for this mobile applicatio... '14-5
Spencer: You don't have to re-compile it, this version w... '14-4
staiano: Any chance we can get a recompile for 10.9? '14-1
dsjf: https://gist.github.com/6bf1bf2c3cbb5eb6e7a7 これ... '13-1
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ