Rails 2.3では相対パスでの運用にバグあり?

ごぶさたです、伊藤です。

最近では社内のプロジェクトにもポツポツとRailsを採用するプロジェクトが増えてきてRubyistとしては嬉しい限りです。
しかし、最近Rails2.3のアプリケーションをLinuxサーバ上にApache2.2+Mongrel(Cluster)という構成で配置しようとしたところ、
思わぬトラブルに巻き込まれましたので報告です。

今回配置しようとしたrailsアプリケーションは、いろんなコンポーネントが連携するシステムの一部で、ドメイン直下ではなく
http://hogeramogera/honyarara というような感じでURLのドメイン直下ではなく、相対パスが与えられた上での運用ということになっていました。
Mongrel Clusterでは、このような場合mongrel_cluster.xmlにprefix: /honyararaと書いたり、コマンドラインによる起動であれば–prefx /honyararaとします。
しかし、rails2.3になってからこれがうまく動かなくなってしまったようで、mongrelが出力するログには以下のようなメッセージが残っていました。

** Mounting Rails at /honyarara…
/var/lib/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:440:in `load_missing_constant’: uninitialized constant ActionController::AbstractRequest (NameError)
from /var/lib/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:80:in `const_missing’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:151:in `rails’
from /usr/bin/mongrel_rails:115:in `cloaker_’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:149:in `call’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:149:in `listener’
from /usr/bin/mongrel_rails:101:in `cloaker_’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:50:in `call’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:50:in `initialize’
from /usr/bin/mongrel_rails:86:in `new’
from /usr/bin/mongrel_rails:86:in `run’
from /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/command.rb:212:in `run’
from /usr/bin/mongrel_rails:283

普通に例外が起きています!
設定がおかしいとかではなく、これはもうバグのレベルですね。
Railsプロジェクトはリリースエンジニアリングが割としっかりしているように思っていたのですが、そうでもないのでしょうか^^;
missingになっている定数(Rubyではクラスも宣言すると定数扱い)ActionController::AbstractRequestは2.3からなくなったクラスのようでした…

なにはともあれ、問題を解決しないことは仕事が進まないので、いろいろ対処法を探していたのですが、最初に目についた
Rails2.3.2でmongrel_clusterにprefixを付けると起動しない問題の対策を試してみましたが、こちらのページでも述べられているようにpublic以下のコンテンツに対するURL生成が相対パスを考慮しておらず、静的コンテンツのコピーやシンボリックリンクによる対応はあまりにもダサいので、他にいい方法はないかもう少し探すことにしました。

そこで、サブディレクトリ下で Rails 2.3 を動かすときの注意点を参考に、試してみたところ、うまくいきました!
blogによるプログラミング技術やノウハウの共有は本当に素晴らしいですね。
BPSも本ブログを通じて皆様の役立つ技術やノウハウを共有できるように頑張ります!

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

渡辺 正毅

1984年生。サンフランシスコ育ち。大学から憧れの日本に留学し、そのまま移住。2006年慶應大学SFC卒。2007年BPS株式会社設立。いい国ですよね。もっとよくしたい。好きになってくれる人を増やしたい。

渡辺 正毅の書いた記事

夏のTechRachoフェア2019

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ