質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.20%

Nginx で Unicorn起動時、白い画面にNot Found: / の表示 (Rails)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,237

HiromasaSuzuki

score 13

皆様

ご覧頂きありがとうございます。
初めて質問させて頂きます。
まだプログラミングを始めたばかりで、表現に間違いがあるかもしれませんが、
その際はご指摘頂けますと幸いです。
宜しくお願い致します。

実現したいこと

当該IPアドレスを入力した時にアプリの画面表示

エラーメッセージ

白いページに Not Found: /

環境/前提

・ さくらVPS / CentOS 6.8 / rails 4.2.6 / Nginx 1.10.1 / Capistrano3/
・ Unicorn は bundle exec unicorn_rails -c config/unicorn.rb -D -E staging で起動確認済み

 /etc/nginx/conf.d/local.conf(default.conf) 

upstream unicorn{
    server unix:/tmp/unicorn.sock
    fail_timeout=0;
}

server {
    listen (IPアドレス):8080;
    listen 80;
    server_name  (自分で決めたホスト名);

    root   /var/www/my_app/current/public;
    client_max_body_size 4G;

      location ~ ^/assets/ {
        root /var/www/my_app/current/public;
    }

    location / {
        root   /var/www/my_app/current/public;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        autoindex on;

        if (!-f $request_filename) {
            proxy_pass http://unicorn;
            break;
        }
     }

     error_page 500 502 503 504 /500.html;

     location = /500.html {
        root /var/www/my_app/current/public;
     }
}

 Unicorn.rb

@app_path = '/var/www/my_app'
working_directory @app_path + "/current"

worker_processes 2
preload_app true
timeout 30
listen "/tmp/unicorn.sock", :backlog => 64
pid "/var/www/my_app/shared/tmp/pids/unicorn.pid"

stderr_path "/var/www/my_app/shared/log/unicorn.stderr.log"
stdout_path "/var/www/my_app/shared/log/unicorn.stdout.log"

before_fork do |server, worker|
  ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT'])
end

before_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.connection.disconnect!
  end

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exists?(old_pid) && server.pid != old_pid
    begin
      Process.kill("QUIT", File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  if defined?(ActiveRecord::Base)
    ActiveRecord::Base.establish_connection
  end
end

試したこと

・Unicon停止した状態で、IPアドレスに接続を図る
└ Rails の We're sorry, but something went wrong. が表示
└ to unix:/tmp/unicorn.sock failed to unix:/tmp/unicorn.sock failed (111: Connection refused)
・Unicorn 起動
└ 白い画面にNot Found: / 
└ エラーログなし

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

unicornはソケットで通信を想定されてますでしょうか。
nginxからリクエストすると502になるので、nginxがバックエンドのunicornにリクエストを転送していますが、unicorn側に繋がらない状態のようです。

unicornのプロセスは起動しているようでも、nginx側が期待してるソケットで待ち受け出来てないかもしれません。
うまく上がっていれば、ncやsocatといったコマンドで確認できます。

気になったのは、nginxとunicornの設定側とで、ソケットのパスが違うあたりです。unicorn的にはlisten のところで指定してるパスで待ち受けてると思います。

この辺りを確認して、最後にどうしてもうまくいかない場合、unicornの起動をソケットからtcpのポート接続(3000番など)に変えてみたりしてはいかがでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/22 22:53

    suama さま

    ご丁寧にありがとうございます。
    原因を突き止めたいと思います。

    また進捗ございましたらご報告させて頂きます。
    改めて本当にありがとうございました。

    キャンセル

  • この投稿は削除されました

  • 2016/10/25 18:19

    ご無沙汰しております。
    試行錯誤を重ねて、解決する事が出来ました。
    原因はconfig.ruを勝手にアレンジしている事でした・・・

    その問題を発見するに辺り、suamaさんの助言、大変役立ちました。
    誠にありがとうございました。

    キャンセル

+1

location @unicorn {
は違う気がします。
location / {location /hogehoge {など、ブラウザがアクセスするURIを入れてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/21 18:34

    ありがとうございます!試した結果をまたご報告させて頂きます!

    キャンセル

  • 2016/10/21 18:51 編集

    location / {
    に記述を変えた所画面表示は502 Bad Gatewayとなりました。
    ありがとうございます。

    再度質問になり、恐縮なのですが、
    error.logを確認すると index of "/var/www/my_app/" is forbiddenのままなのですが、
    これはパーミッションでなく別の問題に起因しているのでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる