2013-03-08 59 views
11

我有一個Rails應用程序與jquery-ui可排序列表。當用戶從一個列表拖到另一個列表時,wostatus_id字段被更新。所以,它在jQuery Ajax更新上失敗。jquery-ui sortable獲取錯誤 - PUT 501(未實現)

這在本地主機和Heroku上正常工作。但是,我將該應用程序移至Bitnami Virtual Server + Rails實施。我不知道它是否相關,但是我在新服務器上使用了node.js。

在這個新的服務器,我發現了瀏覽器控制檯上的錯誤:

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

enter image description here

這是咖啡腳本:

$("#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') 

感謝您的幫助!

UPDATE1

我得到了同樣的錯誤,當我使用fullcalendar護欄月視圖中拖動事件從一天到另一個。

UDPATE2

我發現這個「修復501錯誤代碼 客戶應指定一個有效的請求類型。即使之後,如果Web服務器響應不正確,那麼Web服務器只需要升級到修復問題。」

我敢肯定,請求是好的 - 相同的代碼已經在localhost和Heroku上運行了幾個月。所以,它必須與我使用的新虛擬服務器有關。

新的服務器是Bitnami Rails堆棧。它安裝了node.js。我正在運行Apache,Passenger和PG。

我該如何升級服務器來解決問題?

UPDATE3

這CoffeeScript中得到了相同的迴應:

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 

UPDATE4

可能的Apache是​​停止使用PUT的?也許在https.conf中設置一些?

UPDATE5

相同的應用程序運行正常使用薄!!!!所以,我將嘗試使用Nginx和Thin。

UPDATE6

我無法讓它工作。因此,我將嘗試使用Nginx和5個精簡應用程序服務器。

UPDATE7

我現在有Nginx的和5臺瘦服務器運行Rails應用程序。我仍然得到501 PUT - jquery錯誤!

如果我在3000端口獨立運行瘦,它工作正常。

如果我在端口80上運行Thin獨立,我會得到相同的JQUERY PUT 501錯誤。

那麼,什麼是錯的,使用的端口我們的服務器80

+0

它接近你的問題? https://www.geekisp.com/forum/index.php?topic=36。0; prev_next = prev – rbinsztock 2013-03-12 00:55:08

+0

Senayar,它說「負載平衡器默認過濾PUT和DELETE」。如果這是我的問題,你知道我可以如何啓用它們嗎? – Reddirt 2013-03-12 13:19:31

+0

我認爲主要問題來自你的apache conf。檢查您的apache使用的端口是否已被使用或轉發良好? fuser -n tcp port – rbinsztock 2013-03-12 18:54:02

回答

4

我花了近2周的這方面的工作。我嘗試過Apache + Passenger和Nginx + Thin。

結果是沒有一個是原因。它與Rails應用程序設置無關。

這是一個龐大的網絡服務器,停止PUT。

2

檢查你的Apache配置的限制關鍵字。

有機會,在默認情況下你有類似的東西的地方:

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

這阻止Web服務器接受任何PUT和DELETE請求,因此501(未實現)。

UPDATE:

那麼你已經找到的東西是:

<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目錄。

+0

我發現一個conf文件的限制https- userdir.conf。這裏有一個鏈接:https://dl.dropbox.com/u/35302780/httpd-userdir.conf但是,它不是PUT的限制。不過,這可能是問題嗎? – Reddirt 2013-03-13 14:20:24

+0

@Reddirt:答案已更新 – regilero 2013-03-13 15:32:46

+0

我更改了https-userdir.conf以查看此列表:https://dl.dropbox.com/u/35302780/httpd-userdir.conf然後我重新啓動了Apache。但是,錯誤並沒有消失。我將花更多時間搜索conf文件。 – Reddirt 2013-03-13 15:51:43

1

您是否嘗試過綜合請求而無需排序?我有這種偷偷摸摸的懷疑,JUI添加瘋狂的臨時元素,瘋狂地格式化您的請求。

或者,只要有東西在本地工作,但不在服務器上,我認爲某些東西不是異步的。

而不是在排序上發出請求,註銷請求的參數。他們有道理嗎?

1

以及如果你的服務器apache配置好了虛擬主機。使用寶石安裝乘客和乘客安裝apache2模塊到你的Rails應用程序。所以他告訴你你需要添加到你的文件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?

在這裏你可以找到一個教程部署Rails應用與Apache:Rails 3.1 application deployment tutorial

相關問題