【问题标题】:undefined method `propfind' for ActionDispatch::Routing::MapperActionDispatch::Routing::Mapper 的未定义方法“propfind”
【发布时间】:2015-08-21 06:31:11
【问题描述】:

我正在尝试在我的 rails 应用程序上实现git push,它发送 PROPFIND 请求,rails 似乎没有验证。当我尝试时:

git 推送http://localhost:3000/satellite/.git

它给了我:

于 2015 年 6 月 8 日为 127.0.0.1 启动 PROPFIND "/satellite/.git/" 19:20:38 +0530

ActionController::RoutingError(没有路由匹配 [PROPFIND] "/satellite/.git")

但是git clone http://localhost:3000/satellite/.git 工作得很好。 (即那里存在回购。)

如果我尝试将 propfind 添加到我的 routes.rb 文件中,它会给我:

ActionDispatch::Routing::Mapper 的未定义方法 `propfind'

我发现了这个:https://rails.lighthouseapp.com/projects/8994/tickets/5895-allow-mounting-of-rack-apps-that-deal-with-http-extensions

我认为在那个补丁之后他们允许在 ActionDispatch 中使用 PROPFIND,并且在 doc 他们提到 propfind 作为 RFC3253 常量。有什么方法可以启用 PROPFIND 吗?

【问题讨论】:

  • 不是您的直接解决方案,但似乎其他人在使用 Rails ~ 3.1 时遇到了这个问题,并制作了一个您可能想要查看的宝石github.com/wvk/railsdav
  • 感谢@JonathanBender。我使用的是哑 http 协议,因此在推送期间它回退到 webdav 并发送一个 profind 请求。我用github.com/gitlabhq/grack 切换到智能http,现在推送发送post 请求。但是,我仍然不明白为什么 rails 不会验证 propfind 请求,因为我的应用不是 webdav 应用?

标签: ruby-on-rails git actiondispatch


【解决方案1】:

看来您必须通过通用匹配器 (see this test) 将 PROPFIND 请求添加到您的路由,因此以下内容应该适合您:

resources :git_repos do
  member do
    match '.git' => :your_route, :via => :propfind
  end
end

【讨论】:

  • 不是我需要它,因为 smart http 肯定比 webdav 好,但是它可以工作,我不再得到未定义的方法。 RFC2616 有 get 和 post 方法,RFC2518 有 propfind,如果正常的常规方式适用于 RFC2616,那为什么它不能适用于 RFC2518?
  • 我的猜测是,为了鼓励人们遵循“Rails 方式”,这些便利方法仅适用于 RFC2616,但它们通过 via 选项“支持”所有其他 RFC 如果你真的想(强调我的)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多