Tech Racho エンジニアの「?」を「!」に。
  • インフラ

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も本ブログを通じて皆様の役立つ技術やノウハウを共有できるように頑張ります!


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。