我正在尝试在我的 rails 2.3.8 应用程序中使用 dav4rack。我正在创建一个自定义 config.ru 文件来加载轨道,并且正在使用乘客。标准 rails config.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
我对机架配置很陌生,现在运行 rails 3 不是这个应用程序的选项。任何想法为什么 config.ru 不喜欢 map 调用?
更新:我以 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
哪个与机架一起成功运行。