10

我有一个带有 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

我发现了这个“Fixing 501 error code The client should specify an valid request type。即使在此之后,如果 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 的服务器出了点问题。

4

5 回答 5

4

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

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

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

于 2013-03-16T15:27:13.837 回答
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>

这意味着只有GET,POST并且OPTIONS查询被接受 ( allow from all) 并且不在此列表 ( LimitExcept) 中的任何内容都被拒绝 ( Deny From All)。

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

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

于 2013-03-13T12:58:29.040 回答
1

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

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

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

于 2013-03-14T20:56:43.093 回答
1

好吧,如果您的服务器 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 与乘客一起使用。

我也看看这个:501 Method Not Found error on a javascript file - 更改名称然后它可以工作 - 为什么?

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

于 2013-03-15T15:03:05.003 回答
0

有同样的问题,按照其他人的建议查看 POUND 反向代理服务器配置并将 xHTTP 更改为 1 的值为我修复了它。

http://manpages.ubuntu.com/manpages/xenial/man8/pound.8.html查看 ubuntu POUND 配置详情

于 2019-04-25T10:22:26.107 回答