yohasebe.com


Sat May 30 22:20:23 +0900 2009

サブディレクトリ下で Rails 2.3 を動かすときの注意点

久々のサーバー設定関連の備忘録。書いておかないと絶対また後で多大な時間を無駄にする自信がある。

以前作ったRailsアプリをRails 2.3.1で動かそうとしたところ、下のようなエラーが出た。

Mounting Rails at /myapp... 
/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/\
active_support/dependencies.rb:440:in `load_missing_constant': \
uninitialized constant ActionController::AbstractRequest (NameError)

ひたすらググって原因を突き止めた。Railsの最新バージョンである2.3では、MongrelやThinを起動する際 --prefix オプションを使用するとこのようなエラーが出るとのこと。つまり、サブディレクトリ下でアプリを運用するときは今までとは違うやり方を用いる必要があるということだ。2.3からRackが組み込まれたことと関係があるそうな。

Rackはしばらく仕事で使ってきたので、ある程度よく知っているものの、cssやjavascriptなどstaticなファイルを扱うのに少々コツが要るので、諸々の問題を正攻法で解決するのには結構な手間がかかりそうな気がする。

最小限の労力でこれを乗り切るには、 AbstractClass をRailsに再定義してやるのがよさそう。ということで、さらに調べてみると ここ に方法が。

config/initializers ディレクトリに abstract_request.rb というファイルを作り(名前は何でもいいはず)、以下のコードを書き込む。

module ActionController
  class AbstractRequest < ActionController::Request
    def self.relative_url_root=(path)
      ActionController::Base.relative_url_root=(path)
    end
    def self.relative_url_root
      ActionController::Base.relative_url_root
    end
  end
end

あとは普通にMongrelなりThinなりを起動。

mongrel_rails start -p 3000 -d --prefix=/myapp

しかしこういう仕様変更にいちいち対応するのは非常につらい。MerbとマージされることになっているRails 3.0がいずれ出るのは、楽しみなような怖いような。

Prev entry | | Next entry



大学関係


計算機プログラミング


その他いろいろ


--