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

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

ただいまの
回答率

89.21%

Nginxの連携で デプロイしたRailsアプリのIndexが表示されず Not Found: /が表示されてしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,551

HiromasaSuzuki

score 13

皆様

ご拝読頂きましてありがとうございます。
手元のローカルマシンからVPS(CentOS)にデプロイまでは完了し、
後はアプリの画面を表示させるだけなのですが、どうしても上手くいきません。
お力添えお願い致します。

エラーメッセージ

(http://[IPアドレス]:3000/)アクセス時
・ (http://[IPアドレス]:3000/)アクセス時、上記がブラウザ上で表示
・ ブラウザコンソール画面を開くと404のエラーメッセージ(初回アクセス時のみ)

環境

・  さくらVPS / CentOS 6.8 / rails 4.2.6 / Nginx 1.10.1 / Capistrano3/ mysql
・  手元(Mac)からデプロイ完了済み
・  表示させたいindexのディレクトリ
└ /var/www/my_app/current/app/views/companies/index.html.erb

現状

当初はUnicornでの起動を試みていたが、UnicornとNginxの設定ミスかと思い、試行錯誤するも上手く行かなかったので、Webrickで起動。(下記コマンド)そこで同様の問題が発生。
nginxの設定ミスなのか、それともデプロイ時に致命的なミスをしているのかも分からず立ち往生中。

[my_name@my_app current]$ RAILS_ENV=staging bundle exec bundle exec rails server -b 0.0.0.0

=> Booting WEBrick
=> Rails 4.2.6 application starting in staging on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2016-10-25 10:23:21] INFO  WEBrick 1.3.1
[2016-10-25 10:23:21] INFO  ruby 2.3.1 (2016-04-26) [x86_64-linux]
[2016-10-25 10:23:21] INFO  WEBrick::HTTPServer#start: pid=6191 port=3000


/etc/nginx/nginx.conf


user  my_name;

worker_cpu_affinity auto;
worker_processes auto;
worker_rlimit_nofile 4096;

error_log  /var/log/nginx/error.log info;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;

    gzip_proxied any;
    gzip_types text/plain
             text/xml
             text/css
             text/comma-separated-values
             text/javascript
             application/x-javascript
             application/atom+xml;

    keepalive_timeout  65;

    gzip  on;
    server_tokens off;
    include /etc/nginx/conf.d/local.conf;   
}

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

server {
    listen 80; 
    listen [::]:80;
    server_name  IPアドレス;

    root   /var/www/my_app/current; #my_app = 自分のアプリ名
    client_max_body_size 4G;


     location /favicon {
        empty_gif;
        access_log    off;
        log_not_found off;
     }     
}

config/deploy.rb (デプロイ時の設定)

# http://qiita.com/zaru/items/9e02706b27094ce36902  参考にしたサイト

# config valid only for current version of Capistrano
lock '3.6.1'

set :application, 'my_app'
set :repo_url, 'git@github.com:my_name/my_app.git'
set :log_level, :debug
set :keep_releases, 3
set :deploy_to, '/var/www/my_app'
set :scm, :git
set :format, :pretty
set :ssh_options, :port => "2222"
set :rvm_type, :user
set :default_env, { rvm_bin_path: '~/.rvm/bin/rvm' }
set :rvm1_ruby_version, "ruby-2.3.1"
set :rvm1_map_bins, %w{rake gem bundle ruby}
set :pty, true
set :linked_files, fetch(:linked_files, [ ]).push('config/database.yml', 'config/secrets.yml')
set :linked_dirs, fetch(:linked_dirs, [ ]).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'public/system', 'vendor/bundle')

after 'deploy:publishing', 'deploy:restart'

namespace :deploy do
  desc 'Restart application'
  task :restart do
    invoke 'unicorn:restart'
  end

  desc 'upload important files'
  task :upload do
    on roles(:app) do |host|
      execute :mkdir, '-p', "#{shared_path}/config"
      upload!('config/database.yml',"#{shared_path}/config/database.yml")
      upload!('config/secrets.yml',"#{shared_path}/config/secrets.yml")
    end
  end
  before :starting, 'deploy:upload'
  after :finishing, 'deploy:cleanup'
end

追記情報などご必要でしたらお申し付け下さい。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

Nginxを挟むならこんな感じです。

upstream unicorn {
  server 127.0.0.1:3000;
}

server {
    listen 80; 
    listen [::]:80;
    server_name  IPアドレス;

    root   /var/www/my_app/current/public; #my_app = 自分のアプリ名
    client_max_body_size 4G;


     location /favicon {
        empty_gif;
        access_log    off;
        log_not_found off;
     }

     location / {
        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_pass_header Content-Disposition;
        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://unicorn;
            break;
        }
    }
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/10/27 12:47

    ありがとうございます!!!!
    お陰で表示することが出来ました。

    キャンセル

  • 2017/08/13 16:19

    横から失礼します。
    root /var/www/my_app/current/public;と
    root /var/www/my_app/public;
    を設定上、頻繁に見かけます。この両者の違いは何でしょうか。

    キャンセル

  • 2017/08/17 11:08

    nginxでサーブするファイル群が入っているパスの違いです。
    前者のように"current"が入っているものは、次のように/var/www/my_app配下の特定のバージョンにリンクされている感じになっています。
    /var/www/my_app/current -> /var/www/my_app/XXXXXXXX
    新しいバージョンをデプロイしたらこのリンクを張り替える形となります。

    後者のcurrentが入っていないものは、上記のようなバージョン管理方法ではないということかな。

    キャンセル

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

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