Rails2.3.8アプリケーションでdav4rackを使用しようとしています。レールをロードするためのカスタムconfig.ruファイルを作成しており、Passengerを使用しています。標準のrailsconfig.ruファイルは問題なくロードされます。
require "config/environment"
use Rails::Rack::LogTailer
use Rails::Rack::Static
run ActionController::Dispatcher.new
ただし、webdavリソースのマッピングを追加すると、rackupを実行すると例外が発生します。
# Rails.root/config.ru
require "config/environment"
require 'dav4rack'
use Rails::Rack::LogTailer
use Rails::Rack::Static
map "/webdav/" do
run DAV4Rack::Handler.new(:root => "/path/to/app/public")
end
run ActionController::Dispatcher.new
例外は次のとおりです。
/home/buffy/.rvm/gems/ruby-1.8.7-p302/gems/rack-1.1.0/lib/rack/builder.rb:73:in `to_app': undefined method `call' for #<Hash:0x7f5101b000f0> (NoMethodError)
from /home/buffy/.rvm/rubies/ruby-1.8.7-p302/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `inject'
from /home/buffy/.rvm/gems/ruby-1.8.7-p302/gems/rack-1.1.0/lib/rack/builder.rb:73:in `each'
from /home/buffy/.rvm/gems/ruby-1.8.7-p302/gems/rack-1.1.0/lib/rack/builder.rb:73:in `inject'
from /home/buffy/.rvm/gems/ruby-1.8.7-p302/gems/rack-1.1.0/lib/rack/builder.rb:73:in `to_app'
from config.ru:1
私はラック構成にかなり慣れていないので、Rails3を実行することは現在このアプリケーションのオプションではありません。config.ruがマップ呼び出しを好まない理由はありますか?
更新:例としてrailties / lib / Commands/server.rbを使用してそれを理解しました。私のconfig.ruファイルは次のようになります。
# Rails.root/config.ru
require 'config/environment'
require 'dav4rack'
use Rails::Rack::LogTailer
map '/' do
use Rails::Rack::Static
run ActionController::Dispatcher.new
end
map '/webdav/' do
use Rack::CommonLogger
run DAV4Rack::Handler.new(:root => '/pat/to/app')
end
これは、ラックアップで正常に実行されます。