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

「501エラーコードを修正しています。クライアントは有効なリクエストタイプを指定する必要があります。その後でも、Webサーバーが正しく応答しない場合は、Webサーバーをアップグレードして問題を解決する必要があります。」

リクエストは問題ないと確信しています。同じコードが localhost と Heroku で何ヶ月も実行されています。つまり、私が使用している新しい仮想サーバーと関係があるはずです。

新しいサーバーは Bitnami Rails スタックです。node.js がインストールされています。私はApache、Passenger、およびPGを実行しています。

サーバーをアップグレードして問題を解決するにはどうすればよいですか???

更新3

この 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

更新4

Apache が PUT の使用を停止している可能性はありますか? 多分https.confのいくつかの設定?

更新5

Thin !!!! を使用すると、同じアプリが正常に動作します。そこで、Nginx と Thin を試してみます。

更新6

私はそれを働かせることができません。そこで、Nginx と 5 つのシン アプリ サーバーを試してみます。

更新7

これで、Nginx と 5 つの Thin サーバーで 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を意味しPOSTOPTIONSクエリは受け入れられ ( allow from all)、このリストにないものはすべて ( LimitExcept) 拒否されます ( Deny From All)。

PUT キーワードが必要な場合は、これらの 2 つの設定 (LimitおよびLimitExcept) に追加します。

これらの制限は/home/*/public_htmlディレクトリにのみ適用されることに注意してください。

于 2013-03-13T12:58:29.040 に答える
1

ソート可能なしでリクエストを合成しようとしましたか?私は、JUIがあなたのリクエストをめちゃくちゃにフォーマットしているクレイジーな一時要素を追加しているというこのこっそりの疑いを持っています。

あるいは、何かがローカルで機能するがサーバー上では機能しないときはいつでも、何かが非同期ではないはずだと思います。

ソート時にリクエストを行う代わりに、リクエストのパラメータをログアウトします。それらは意味がありますか?

于 2013-03-14T20:56:43.093 に答える
1

サーバーApacheがVirtualhostで適切に構成されている場合は問題ありません。geminstallpassengerとpassenger-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をPassengerで使用することをお勧めします。

私もこれを見ます:javascriptファイルの501メソッドが見つかりませんエラー-名前を変更すると機能します-なぜですか?

ここでは、Apacheを使用してRailsアプリをデプロイするためのチュートリアルを見つけることができます:Rails3.1アプリケーションのデプロイメントチュートリアル

于 2013-03-15T15:03:05.003 に答える