Ответ 1
Я потратил почти 2 недели на это. Я пробовал Apache + Passenger и Nginx + Thin.
В конце концов, это не причина. Это не имело никакого отношения к настройке приложения Rails.
Это был сетевой сервер Pound, который останавливал PUT.
У меня есть приложение Rails с отсортированными списками jquery-ui. Когда пользователь перетаскивает из одного списка в другой, поле wostatus_id обновляется. Таким образом, он не работает при обновлении jquery Ajax.
Это отлично работает в localhost и на Heroku. Но я перемещаю приложение в реализацию Bitnami Virtual Server + Rails. Я не знаю, связано ли это, но я использую node.js на новом сервере.
На этом новом сервере я получаю эту ошибку в консоли браузера:
PUT http://ndeavor.ameipro.com/workorders/2 501 (Not Implemented)
Это кофе script:
$("#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-rails.
UDPATE2
Я нашел этот код ошибки "Fixing 501" Клиент должен указать действительный тип запроса. Даже после этого, если веб-сервер отвечает неправильно, то веб-сервер просто нуждается в обновлении для исправления проблемы.
Я уверен, что запрос в порядке - тот же код работает на localhost и Heroku в течение нескольких месяцев. Таким образом, это должно быть чем-то связано с новым виртуальным сервером, который я использую.
Новый сервер представляет собой стек Bitnami Rails. Он имеет node.js. Я запускаю Apache, Passenger и PG.
Как мне обновить сервер, чтобы устранить проблему?
Update3
Этот кофейник получает тот же ответ:
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
То же приложение работает отлично, используя Thin!!!! Итак, я попытаюсь использовать Nginx и Thin.
UPDATE6
Я не могу заставить его работать. Итак, я собираюсь попробовать Nginx и 5 Thin серверов приложений.
UPDATE7
Теперь у меня есть приложение Rails, работающее на Nginx и 5 Thin серверах. Я все еще получаю ошибку 501 PUT - jquery!!!!
Если я запускаю Thin в автономном режиме на порте 3000, он отлично работает.
Если я запускаю Thin stand-alone на порт 80, я получаю ту же ошибку JQUERY PUT 501.
Итак, что-то не так с нашими серверами, использующими порт 80.
Я потратил почти 2 недели на это. Я пробовал Apache + Passenger и Nginx + Thin.
В конце концов, это не причина. Это не имело никакого отношения к настройке приложения Rails.
Это был сетевой сервер Pound, который останавливал PUT.
Проверьте ключевое слово Limit в настройках apache.
есть вероятность, что по умолчанию у вас есть что-то вроде этого:
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
Это не позволяет веб-серверу принимать любые запросы 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>
Это означает, что принимаются только запросы GET
, POST
и OPTIONS
(allow from all
), а все, что не в этом списке (LimitExcept
), отклонено (Deny From All
).
Если вам нужно ключевое слово PUT, добавьте его в тезисы двух настроек (Limit
и LimitExcept
).
Обратите внимание, что эти ограничения применяются только для каталогов /home/*/public_html
.
Вы пробовали синтезировать запрос без сортировки? У меня есть это подозрительное подозрение, что JUI добавляет безумные временные элементы, которые форматируют ваш запрос безумно.
Альтернативно, всякий раз, когда что-то работает локально, но не на сервере, я считаю, что что-то не является асинхронным, что должно быть.
Вместо запроса на сортировку выйдите из параметров запроса. Имеют ли они смысл?
хорошо, если ваш сервер apache настроен с помощью Virtualhost. используя gem install пассажирский и пассажирский-install-apache2-module в ваше приложение 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 с Пассажиром.
Я также смотрю на это: 501 Ошибка метода не найдена в файле javascript - измените имя, а затем он работает - почему?
Здесь вы можете найти учебное пособие по развертыванию приложения Rails с Apache: Учебник по развертыванию Rails 3.1