Rails2.3.2でmongrel_clusterにprefixを付けると起動しない問題

結論からいうと、2.3.2でmongrel_clusterを使うときにconfig/mongrel_cluster.ymlにprefixを指定しているとダメ。mongrel_clusterのインスタンスが起動直後に落ちたログが/log/mongrel.4000.pidなどに残っている。


解決策は、PinMarch: Rails 2.3が動かず苦悩より

config/environments/production.rb に

ActionController::Base.relative_url_root = '/prefix'

を書く。そして config/mongrel_cluster.yml にはprefixを書かないようにする。


ただし、publicディレクトリ下の静的ファイルには mongrel_cluster.yml にprefixを書いた時のようにprefixがつかないので、prefix名と同じ名前のディレクトリを掘ってそっちにコピーするようにした。(404.htmlなど特殊ファイル以外)

mkdir public/prefix
cp public/index.html public/prefix

cssjavascriptディレクトリも移動させた。



メモ。
log/mongrel.4000.pid などに残っていた起動直後に落ちたログ。
ActionController::AbstractRequest がRails2.3.2には無いらしい。

/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)
        from /usr/lib/ruby/gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:80:in `const_missing'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/rails.rb:151:in `rails'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:113:in `cloaker_'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `call'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:149:in `listener'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:99:in `cloaker_'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `call'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/configurator.rb:50:in `initialize'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `new'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:84:in `run'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/../lib/mongrel/command.rb:212:in `run'
        from /usr/lib/ruby/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281
        from /usr/bin/mongrel_rails:19:in `load'
        from /usr/bin/mongrel_rails:19


こうすると古いバージョンのrailsを起動できる。

rails _2.0.2_
rails _2.2.2_
rails _2.3.2_

2.0.2, 2.2.2ではmongrel_clusterでRailsをデプロイ - 橋本詳解がそのまま動くけど、2.3.2はprefixを書く場所を変えなければいけない。