Ruby on Railsに関する質問です。



Ruby on Railsのアプリケーション上でMeCabによる形態素解析を行おうと思い、実装を始めました。
MeCab / MeCab用の辞書(UTF8)のインストールが終わり、Terminal上からは正常にmecabが動作することを確認しています。

最後にmecab-rubyをインストールしました。
irb上から

require 'MeCab'

を実行するとtrueが返り正しく読み込めるのですが、
これをRailsのコントローラ上で実行すると

no such file to load

エラーが返ってきてしまいます。


irbとrailsでrequireが呼ばれた時に読みにいくパスが違うのかなと思い調べてみたのですが、
残念ながら結局原因解明には至りませんでした。

もしなにかご存知の情報がありましたらよろしくお願いします。



当方の開発環境は
Leopard + Ruby 1.8.6 + Rails 2.0.2 + SQLite3です。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/03/04 18:20:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:masuidrive No.1

回答回数10ベストアンサー獲得回数2

ポイント60pt

config/environment.rb の最後に

require 'mecab'

と書くだけで起動時に読み込まれるので、動くと思います。

id:sota1986

ご回答ありがとうございます。

コントローラではなく起動時に読み込む方法も試してみたのですが、残念ながら同様の「no such file to load」エラーが出てしまい、Mongrelが起動できなくなってしまいました。

http://www.pen-chan.jp/net/set/ruby-tips.html

調べてみたところ、requireでは$: でさされているディレクトリからファイルを探して読み込むらしいので、irbとRailsアプリケーションのruby/scriptでそれぞれ$: の中身を表示してみましたが、基本的にはgem関連の物を除くと同じパスが指定されていました。


ちなみに、irbではなく普通のrbファイルを作って

require "MeCab"

を実行しても正常に動作しています。


部分的にみただけなのでよくわかりませんが、どうやらRails上で呼ばれるrequireはgem_original_requireというメソッドに置き換えられるようなので、もしかするとその辺りになにか原因があるのではないかと考えております。

※MeCab.bundle は「/opt/local/lib/ruby/1.8/i686-darwin9.1.0」以下にあり、このディレクトリはirb / Railsいずれの場合も$: に含まれていました。


(最後になりましたが、いつもブログ拝読しております)

2008/02/26 23:17:46

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません