2

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

これは、ラックアップで正常に実行されます。

4

0 に答える 0