検索機能gem meta_searchの素晴らしさ

久々にRails3使って色々と試してたんだけど、meta_searchというgemがかなりいけてたのでメモ。

毎回、検索処理の実装って結構面倒だなーと思ってたんだけど、このgem使ったら一挙に解決しそうですよ。

使い方はいたって簡単。
以下のサイトの通りに作成すればOK。
Rails3で検索機能の実装 - t-taira blog

上のサイトでは画像無しだから、完成イメージはこんな感じ。

(画像はイメージです。上のサイトではテーブル名や項目名が異なってるし、並び替えは勝手に項目名のところに組んでる。)

自分みたいな脳筋SEだとごり押しで毎回検索機能作る(しかも汎用性を持たせない)とかやりがちだけど、このgem使うとスマートで良いね。
ソートなんかの機能も簡単に実装できるし。

あと、補足だけど、上記のサイト通りの手順で組むだけだとRuby1.9系の環境だと


incompatible character encodings: UTF-8 and ASCII-8BIT
とかいうエラーが出るはず。

対処方法としては、モデルファイルの中身を以下の感じにする。
※上の画像で分かると思うけど、自分はitemテーブル作って色々と試してみてる。


class Item < ActiveRecord::Base
def name
super.force_encoding('UTF-8')
end
def note
super.force_encoding('UTF-8')
end
end

日本語が入る可能性のある項目について、やってやれば良い。

ApacheインストールとSubversion用の定義変更

Subversionインストール手順 - コバルトブルーの心の叫びの続き。

まずはインストーラのダウンロード。
Welcome! - The Apache HTTP Server Projectからダウンロードしてくる。
ここではWin32 Binary without crypto (no mod_ssl) (MSI Installer)と表記されている物をダウンロード。
尚、今回のバージョンは2.2.17。

珍しく画像も用意したりして、丁寧に解説。

インストーラを実行すると以下の画面

Next


I accept 選んでNext


Next


Network Domain:ローカル利用だけならlocalhost。インターネット公開するならドメイン名。
Server Name:サーバー名を記入。ローカル利用だけならlocalhost。マシン名入れておけば良いと思われる。
Administrator's Email Address:自分のメールアドレスを記入しておけば良いと思われる。
Install Apache HTTP Server 2.2 programs and shortcut for:特に理由がなければfor All。


標準構成で問題なければTypicalで。
今回はCustomを選択。


必要な機能だけに絞ってインストールできる。
今回は標準設定のままでインストール先だけ変更した。
尚、インストール先の変更だけならTypical選んでも可能。


Installを押せばインストール開始。


ちょっと待ったら完了。

インストール完了したら自動でApache動いてるので、確認。
http://localhost
につないでみて、「It works!」とか面白みのない画面が出てきたらOK。
動かなかったらサービス等を確認してみましょう。

次にSubversionApache通して動作するように各種設定を行うよ。

Apacheのインストール先(今回はG:\opt\Apache2.2)にある、conf フォルダ内の hddpd.conf を編集する。(httpd.confの編集は旧サーバからのコピーで代用しても良いかも。バージョンの違いを考慮しないなら。)

多分83行目にある以下の行の先頭の#を削除する。


#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
次に、130行目ぐらいでLoadModuleを行っている文が終わっていると思うので、以下の行を追加しておく。

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

ここで一旦Apacheを再起動してみる。
タスクトレイに緑色の三角を丸で囲んだ左上に変な三角帽子が付いたアイコン(説明下手)があると思うので、右クリックで「Open Apache Monitor」を選択。

Restartを押す。


きっとこのダイアログが出てくるはず。

以下のことを行います。
Subversionのインストール先にあるbinフォルダからmod_authz_svn.soとmod_dav_svn.soをコピーする。
Apacheのインストール先にあるmodulesフォルダに貼り付ける。

Apache Service MonitorからStartをクリック。

また、エラーが出たら以下を実施。
Subversionのインストール先にあるbinフォルダからDLLファイルを全てコピー。
Apacheのインストール先にあるbinフォルダに貼り付け。
この際、既にApacheのbinフォルダに存在するDLLは上書きしない
Subversion側の全てのDLLが必要ではないが、どれが必要か、十分に検証できなかったため、全部もってくれば間違いない。別の間違いの発生については知らん。)

これでApache Service MonitorからStartとすれば今度こそ出ないはず。

再度、httpd.confの編集を実施する。
httpd.confの最後の方に「Secure (SSL/TLS) connections」という文の前の行あたりに以下を追加する。


Include conf/extra/httpd-svn.conf

次に、Apacheのインストール先にある、conf/extraにhttpd-svn.confファイルを作成し、下記を記述する。



DAV svn
SVNPath G:/svn/workspace/app1

AuthType Basic
AuthName "Subversion Repository"
AuthUserFile G:/svn/svn_passwd
Require valid-user

※AuthType Basic以下の文章は認証の定義のため、必要に応じて書き換えが必要。
 自分の場合は旧サーバではBasic認証を行っていたので、svn_passwdを旧サーバから持ってきた。

ここでApacheを再起動し、http://localhost/svn/workspace/app1にアクセスして
「app1 - Revision XXX: /」
とか表示されればOK。

今回は以上。
次はコミット時に自動メール配信が行えるようにするつもり。

Subversionインストール手順

微妙にはまったので備忘録として書き残す。

Subversion環境の移行手順。

一応、作業背景を簡単に。
会社で使ってたSubversion専用サーバがプロジェクト規模の割りにハイスペックだったため、他のプロジェクト(自分の古巣)からサーバ寄越せと脅迫。
過去の力関係から仕方なく明け渡すことに合意。

ってなわけで、Windows Server 2003Windows XP へのSubversionの移行を行います。

先ず、移行のために旧サーバからダンプファイルを取得する。
旧サーバのコマンドプロンプトから以下のコマンドを実施。


D:\>svnadmin dump D:\svn\workspace\app1 > backup.dmp

D:\svn\workspace\app1 はリポジトリのパス
backup.dmp はダンプファイルの名称。任意の値を設定。

尚、上記処理にてsvnadminが認識されてない旨を示すエラーが出たら、環境変数のPATHにsubversionまでのPATHが入ってないので追加すること。

次に新サーバ(XPだけど、サーバとしとく)上でSubversionをインストールする。

Apache Subversion Binary Packages
から Win32Svn となっている箇所をダウンロードして実行する。
(今回のバージョンは1.6.16)

インストール先のパスだけ設定は任意で、後は「次へ」ボタンを押すだけ。

インストールが完了したら、新サーバにリポジトリ格納フォルダを作成。
今回は G:\svn\workspace を作成。

コマンドプロンプトから以下を実行。


G:\>svnadmin create /svn/workspace/app1
すると G:\svn\workspace\app1 に conf や db 等のフォルダが作成される。

次にダンプファイルをコピーしてきて、カレントディレクトリに配置。
以下のコマンドを実行。


G:\>svnadmin load /svn/workspace/app1 < backup.dmp

ずらずらとリビジョンの追加を行われる。

今回はここまで。
次回にapacheのインストール、次々回でsvnコミット時に自動メール配信の設定方法を記載予定。

GruffライブラリにおけるStackedBarの並び順

Rubyでグラフ作成を行うに当たって、Gruffライブラリが便利である。
割と簡単にきれいに作成できて、ブラウザによる規制をあまり受けないから。
(OpenflashChartとかはFirefoxでは動くけどIE対応できていなかったりとかするから。)

インストールは以下のサイトを参考にすればよいはず。
Rails用グラフプラグインGruffの導入 - RubyBeginner (ルビギナー)の世にも奇妙な開発

ただし、Ruby1.9系、Rails3.0系の環境には未対応っぽいので注意。

たぶんすんなり使えるようになると思う。
ただ、ある程度やりたいことがやりたいようにできないため、困った。

まず、Gruffを用いて作成した、グラフ描画メソッドに対して、引数を与えたい。
Rails上で処理する場合、View側に以下のように記載する。

< img src="<%=url_for(:controller=>'controller_name',:action=>'gruffmethod')%>" >
このため、View上で引数を持たせようとしてもurl_forメソッドで渡すこととなるため、上手くいかない。

別のコントローラのメソッドでDB上のワークテーブルにデータを一時的に格納するように修正することで対応した。
もっと良い方法が無いか検討中。

本当に書きたかったのはここから。
Gruffの用途として、円グラフ(Pie)や折れ線グラフ(Line)、棒グラフ(Bar)がある。
棒グラフにおいて、複数要素をグラフ化する際に、StacedBarとすると以下のようになる。
http://geoffreygrosenbach.com/system/assets/1144521884_normal.png

上のリンクを見ると分かるが、タイトル下の表示では「Jimmy, Charles, Julie」となっているが、棒グラフで積み重なっている順番は「Charles, Jimmy, Julie」となっている。
どうも、デフォルトでは各要素の合計が大きいものから積み重ねられていくようである。
このソートを無効にし、データを追加していった順に並び替えるには、

g.sort = false
とすればOK。
参考サイトは以下。
Gruff Stacked Bar order of data - Ruby on Rails - Ruby-Forum

Rubyの改行コード[CR+LF]と[LF]

簡単なツール作るつもりが、はまってしまった。
忘れそうなので、解決策を残しておく。

やろうとしたのは、Excelデータの一覧表をちょっとフォーマット変えてMySQLのテーブルにロードするということ。
そのために、ExcelデータをCSV形式で保存して(ここまでは手動)、それをRuby使って読込んでMySQL上のテーブルレイアウトと同様のCSVファイルを書き出すプログラムをRubyで作成した。

数分でPGは完了したが、MySQLへのLOAD時にエラーとなっていた。
LOADが成功するファイルと見比べてみると、改行コードが異なることが分かった。
(このとき、ちゃんとしたエディタで開いたからすぐ分かって良かった。メモ帳なんかで開いてたら解決に至らなかったかも)

下記の記事の通り、書き込みファイルをオープンする際の指定を"w"(テキストモード)とするか、"wb"(バイナリモード)とするかで改行コードの指定が変わる。(Windows環境なら)

Win32のRubyで改行がCR+LFになってしまう

NetBeansでのruby1.8系、1.9系の同居

Ruby開発においてはNetBeansでの開発を行っている。
先の記事でも書いたけど、Ruby1.9系での開発を行うようになったため、Ruby1.8系とRuby1.9系の開発環境の構築が必要となった。
先の記事ではPathの書き換えでWindows上の同居は可能だと書いたけど、NetBeans上での開発だけを考えれば、それさえも不要っぽい。(十分に検証できてないから、どっかで躓くことがあるかもしれんけど)

NetBeansでの同居設定は、単純にRubyプラットフォームを追加するだけ。
メニューから[ツール]→[Rubyプラットフォーム]でRubyプラットフォームマネージャーが表示されるので、「プラットフォーム追加」ボタンでC:\Ruby192\bin\ruby.exeを指定してやるだけ。
プロジェクトのプラットフォームを変える場合は、プロジェクトのプロパティを開いたら設定できる。

とっても簡単。

ruby 1.9.2 及び rails 3.0.3 をWindows XP SP3にインストール

次期プロジェクトにおいて、ruby 1.9系、rails 3.0系での開発を行うことと決定した。
とはいえ、自分が関わって来たプロジェクトではruby1.8系、rails2.8系がほとんどで、開発端末も分けられない。
同端末に構築できるのかどうかと調べてたが、windowsであればPathさえ書き換えれば同居はさほど問題なさそうだったため、以下を参考にインストール開始。
WindowsにRails3環境を構築(Ruby1.9.2) - 旧toyoshiの日記
インストーラからruby1.9.2をインストール。

上のサイトでは書いてないけど、Pathの書き換えを実施。
システムのプロパティ画面を開き(マイコンピュータの右クリック→プロパティ等から)、詳細設定タグを選択、環境変数ボタンからシステム変数環境のPathを選択。編集ボタンをクリックし、Ruby1.8系のPath(例:C:\Ruby\bin;)をRuby1.9系(例:C:\Ruby192\bin;)に書き換える。
※Pathの指定先はインストール時に指定するため、環境によって異なる。

その後、コマンドプロンプトを立ち上げる。
まずはRubyのバージョン確認。


C:\Documents and Settings\Administrator>ruby -v
ruby 1.9.2p0 (2010-08-18) [i386-mingw32]
一応、irbが起動することも確認。

C:\Documents and Settings\Administrator>irb
irb(main):001:0> a=0
=> 0
irb(main):002:0> b=2
=> 2
irb(main):003:0> a*b
=> 0
irb(main):004:0> a+b
=> 2
irb(main):005:0> exit
(見返してみると、我ながら面白みのかけらも無い演算をしてる)
Gemのバージョンも確認。

C:\Documents and Settings\Administrator>gem -v
1.3.7

Railsのインストール。
これは多少時間かかる。


C:\Documents and Settings\Administrator>gem install rails
ERROR: Error installing rails:
mail requires i18n (~> 0.4.1, runtime)

?!エラー!?
原因がさっぱり。Web上で探しても英語ばかりだし、解決できてないものばかり。
(たぶん、探し方が下手なだけ)

仕方ないので、gem listでも見てみましょう。


C:\Documents and Settings\Administrator>gem list

LOCAL GEMS ***

abstract (1.0.0)
actionpack (3.0.3)
activemodel (3.0.3)
activerecord (3.0.3)
activeresource (3.0.3)
activesupport (3.0.3)
arel (2.0.4)
builder (2.1.2)
erubis (2.6.6)
i18n (0.5.0)
mime-types (1.16)
minitest (1.6.0)
polyglot (0.3.1)
rack (1.2.1)
rack-mount (0.6.13)
rack-test (0.5.6)
rake (0.8.7)
rdoc (2.5.8)
treetop (1.4.9)
tzinfo (0.3.23)

i18nについても「0.5.0」なので「0.4.1」よりも新しい。
よく分からないけど、gemのアップデートでもしてみます。

C:\Documents and Settings\Administrator>gem update --system
Updating RubyGems
Nothing to update
アップデート不要ですって。
わけ分かんないから再チャレンジ。

C:\Documents and Settings\Administrator>gem install rails
Successfully installed mail-2.2.11
Successfully installed actionmailer-3.0.3
Successfully installed thor-0.14.6
Successfully installed railties-3.0.3
Successfully installed bundler-1.0.7
Successfully installed rails-3.0.3
6 gems installed
Installing ri documentation for mail-2.2.11...
Installing ri documentation for actionmailer-3.0.3...
Installing ri documentation for thor-0.14.6...
Installing ri documentation for railties-3.0.3...
Installing ri documentation for bundler-1.0.7...
Installing ri documentation for rails-3.0.3...
Installing RDoc documentation for mail-2.2.11...
Installing RDoc documentation for actionmailer-3.0.3...
Installing RDoc documentation for thor-0.14.6...
Installing RDoc documentation for railties-3.0.3...
Installing RDoc documentation for bundler-1.0.7...
Installing RDoc documentation for rails-3.0.3...
通った!?
一応バージョンも確認。

C:\Documents and Settings\Administrator>rails -v
Rails 3.0.3
よくわかんないですが、上手くいきました。
参考にさせてもらってたサイトとgemのインストール数が異なるけど、mailまではgemのインストールも上手くいってたみたいで、ruby192配下のgemフォルダのタイムスタンプが異なっていた。

後は参考サイト通りだったので省略。