【问题标题】:jquery-ui sortable getting error - PUT 501 (Not Implemented)jquery-ui sortable 出现错误 - PUT 501(未实现)
【发布时间】:2013-03-08 16:49:50
【问题描述】:

我有一个带有 jquery-ui 可排序列表的 Rails 应用程序。当用户从一个列表拖到另一个列表时,wostatus_id 字段会更新。所以,它在 jquery Ajax 更新上失败了。

这在 localhost 和 Heroku 上运行良好。但是,我正在将该应用程序移至 Bitnami Virtual Server + Rails 实现。我不知道它是否相关,但我在新服务器上使用 node.js。

在这台新服务器上,我在浏览器控制台上收到此错误:

PUT http://ndeavor.ameipro.com/workorders/2 501 (Not Implemented) 

这是咖啡脚本:

  $("#sort1, #sort2, #sort3, #sort4, #sort5, #sort6, #sort7").sortable
    connectWith: ".connectedSortable"
    cursor: "move"
    update: ->
      $.post($(this).data('update-url'), $(this).sortable('serialize'))
    receive: (event, ui) ->
      str_id =  $(ui.item).attr('id')
      woid = str_id.split('_')[1]
      $.update "/workorders/" + woid,
        workorder:
        wostatus_id: $(this).data('wostatus-id')

感谢您的帮助!

更新1

当我使用 fullcalendar-rails 月视图将事件从一天拖到另一天时,我遇到了同样的错误。

UDPATE2

我发现了这个“修复 501 错误代码 客户端应指定有效的请求类型。即使在此之后,如果 Web 服务器响应不正确,则只需升级 Web 服务器即可解决问题。”

我确定请求没问题 - 相同的代码已经在 localhost 和 Heroku 上运行了几个月。所以,这一定与我正在使用的新虚拟服务器有关。

新服务器是 Bitnami Rails 堆栈。它安装了 node.js。我正在运行 Apache、Passenger 和 PG。

如何升级服务器来解决问题???

更新3

这个咖啡脚本得到相同的响应:

updateEvent = (the_event) ->
 $.update "/events/" + the_event.id,
   event:
     title: the_event.title,
     starts_at: "" + the_event.start,
     ends_at: "" + the_event.end,
     description: the_event.description

更新4

Apache 可以停止使用 PUT 吗?可能是 https.conf 中的一些设置?

更新5

同样的应用程序使用 Thin 运行良好!!!!所以,我将尝试使用 Nginx 和 Thin。

更新6

我无法让它工作。所以,我打算试试 Nginx 和 5 个瘦应用服务器。

更新7

我现在可以在 Nginx 和 5 台瘦服务器上运行 Rails 应用程序。我仍然收到 501 PUT - jquery 错误!!!!

如果我在端口 3000 上独立运行 Thin,它可以正常工作。

如果我在端口 80 上单独运行 Thin,我会收到相同的 JQUERY PUT 501 错误。

所以,我们使用端口 80 的服务器出了点问题。

【问题讨论】:

  • Senayar,它说“负载均衡器默认过滤 PUT 和 DELETE”。如果这是我的问题,你知道我该如何启用它们吗?
  • 我认为主要问题来自您的 apache conf。检查您的 apache 使用的端口是否尚未使用或转发良好? : fuser -n tcp 端口
  • 如果我在 SSH 控制台中运行此命令 = $ fuser -n tcp port,我得到 Cannot resolve local port port: Servname not supported for ai_socktype
  • 如果我在 SSH 控制台运行这个命令 = $ fuser -n tcp 80,我什么也得不到

标签: jquery ruby-on-rails apache jquery-ui


【解决方案1】:

我花了将近 2 周的时间来解决这个问题。我试过 Apache+Passenger 和 Nginx+Thin。

最终,这些都不是原因。它与 Rails 应用程序设置无关。

这是一个 Pound 网络服务器正在停止 PUT。

【讨论】:

    【解决方案2】:

    检查 apache 配置中的 Limit 关键字。

    很可能默认情况下你在某处有类似的东西:

    <Limit PUT DELETE>
        order deny,allow
        deny from all
    </Limit>
    

    这会阻止 Web 服务器接受任何 PUT 或 DELETE 请求,因此会出现 501(未实现)。

    更新:

    所以你发现的是:

    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
    

    这意味着只接受 GETPOSTOPTIONS 查询 (allow from all),而任何不在此列表 (LimitExcept) 中的查询都会被拒绝 (Deny From All)。

    如果您需要 PUT 关键字,请将其添加到这两个设置中(LimitLimitExcept)。

    请注意,这些限制仅适用于 /home/*/public_html 目录。

    【讨论】:

    • 我找到了一个限制 https-userdir.conf 的 conf 文件。这是它的链接:dl.dropbox.com/u/35302780/httpd-userdir.conf 但是,这不是 PUT 的限制。不过,这可能是问题吗?
    • 我更改了 https-userdir.conf 以查看以下列表:dl.dropbox.com/u/35302780/httpd-userdir.conf 然后我重新启动了 Apache。但是,错误并没有消失。我将花更多时间搜索 conf 文件。
    • 你使用的是 public_html 目录吗?
    • 我正在使用 Bitnami Rails 和 Postgres 堆栈。我使用 Capistrano 进行部署。我正在运行 Apache 和Passenger。我的应用程序被放入此目录 DocumentRoot "/opt/bitnami/projects/ndeavor/current/public" 所以,我使用的是公共目录。但是,不是 public_html——我认为。
    • 检查隐藏在您项目目录的所有父目录上的任何 .htaccess 中的 apache conf - 以及此项目目录)
    【解决方案3】:

    您是否尝试过在没有 sortable 的情况下合成请求?我有这种偷偷摸摸的怀疑,即 JUI 正在添加疯狂的临时元素,这些元素正在疯狂地格式化您的请求。

    或者,每当某些东西在本地工作但不在服务器上时,我认为某些东西不应该是异步的。

    不要在排序时发出请求,而是注销请求的参数。它们有意义吗?

    【讨论】:

      【解决方案4】:

      如果你的服务器 apache 配置好 Virtualhost。在您的 Rails 应用程序中使用 gem install Passenger 和 Passenger-install-apache2-module。所以他会告诉你需要添加到文件 httpd.conf 中的内容。通常你得到的东西接近这个。

      Listen *:80
      NameVirtualHosts *:80
      
      
      LoadModule passenger_module /somewhere/passenger-x.x.x/ext/apache2/mod_passenger.so
      
      PassengerRuby /usr/bin/ruby
      PassengerRoot /somewhere/passenger/x.x.x
      PassengerMaxPoolSize 10
      
      <VirtualHost *:80>
          ServerName www.foo.com
          DocumentRoot /webapps/foo/public
          RailsBaseURI /rails
      </VirtualHost>
      

      但我建议您将 Nginx 与Passenger 一起使用。

      我也在看这个:501 Method Not Found error on a javascript file - change name and it then works - why?

      在这里您可以找到使用 Apache 部署 Rails 应用程序的教程:Rails 3.1 application deployment tutorial

      【讨论】:

        【解决方案5】:

        遇到了同样的问题,按照其他人的建议查看 POUND 反向代理服务器配置,并将 xHTTP 更改为 1 的值为我解决了这个问题。

        http://manpages.ubuntu.com/manpages/xenial/man8/pound.8.htmlSee ubuntu POUND config details

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-10
          • 2012-12-07
          • 1970-01-01
          • 1970-01-01
          • 2015-06-08
          相关资源
          最近更新 更多