3

アプリケーションの詳細:
Rails 3.1.0
Ruby 1.9.2
unicorn 4.2.0
resque 1.20.0
nginx/1.0.14
redis 2.4.8

私はactive_admin gemを使用しています。すべての URL で応答 200 が返されますが、本番環境で
502 エラーが発生する URL は 1 つだけです。

レーキ ルート :

admin_links GET        /admin/links(.:format)                                            {:action=>"index", :controller=>"admin/links"}

そして、ローカル(開発)に取り組んでいます。

localhost ログ: 応答コード 200

    Started GET "/admin/links" for 127.0.0.1 at 2013-02-12 11:05:21 +0530
        Processing by Admin::LinksController#index as */*
        Parameters: {"link"=>{}}
    Geokit is using the domain: localhost
        AdminUser Load (0.2ms)  SELECT `admin_users`.* FROM `admin_users` WHERE `admin_users`.`id` = 3 LIMIT 1
         (0.1ms)  SELECT 1 FROM `links` LIMIT 1 OFFSET 0
         (0.1ms)  SELECT COUNT(*) FROM `links` 
         (0.2ms)  SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `links` LIMIT 10 OFFSET 0) subquery_for_count 
        CACHE (0.0ms)  SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM `links` LIMIT 10 OFFSET 0) subquery_for_count 
        Link Load (0.6ms)  SELECT `links`.* FROM `links` ORDER BY `links`.`id` desc LIMIT 10 OFFSET 0
        Link Load (6677.2ms)  SELECT `links`.* FROM `links` 
    Rendered /usr/local/rvm/gems/ruby-1.9.2-head/gems/activeadmin-0.4.2/app/views/active_admin/resource/index.html.arb (14919.0ms)
    Completed 200 OK in 15663ms (Views: 8835.0ms | ActiveRecord: 6682.8ms | Solr: 0.0ms)

制作ログ:502レスポンス

    Started GET "/admin/links" for 103.9.12.66 at 2013-02-12 05:25:37 +0000
        Processing by Admin::LinksController#index as */*
        Parameters: {"link"=>{}}

NGinx エラーログ

2013/02/12 07:36:16 [error] 32401#0: *1948 upstream prematurely closed connection while reading response header from upstream

何が起こっているのかわからないので、仲間が助けてくれませんか。

4

1 に答える 1

1

タイムアウトの問題があります。

それに取り組む

HTTP/1.1 502 不正なゲートウェイ

nginx が構成されたアップストリームと通信する際に問題があったことを示します。 http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#502

2013/02/12 07:36:16 [エラー] 32401#0: * 1948 アップストリームは、アップストリームから応答ヘッダーを読み取り中に接続を途中で閉じました

Nginx エラー ログは、Nginx が構成されたアップストリームに実際に接続できたが、応答が (完全に) 受信される前にプロセスが接続を閉じたことを示しています。

開発環境:

15663ms で 200 OK を完了

明らかに、開発マシンで応答を生成するには約 15 秒かかります。

proxy_connect_timeout とは対照的に、このタイムアウトは、ユーザーを接続プールに入れるサーバーをキャッチしますが、それ以上の応答はありません。プロキシ サーバーが故意に要求に応答するのに時間がかかる場合があるため (計算に時間がかかるレポート ページを提供する場合など)、この値を低く設定しすぎないように注意してください。ただし、場所ごとに異なる設定を行うことができます。これにより、レポート ページの場所に対してより高い proxy_read_timeout を設定できます。

http://wiki.nginx.org/HttpProxyModule#proxy_read_timeout

nginx 側では、proxy_read_timeout はデフォルトで 60 秒なので安全です。

ruby (レール上) がどのように機能するのかわかりません。エラー ログを確認してください。スタックのその部分でタイムアウトが発生します。

于 2013-12-13T10:32:04.900 に答える