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

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

ただいまの
回答率

90.51%

  • Ruby on Rails

    8857questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • AWS(Amazon Web Services)

    2536questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • nginx

    1034questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Capistrano

    155questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

  • unicorn

    123questions

    Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Nginxでアプリのルートファイルが表示されないです。

解決済

回答 1

投稿 編集

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

konake15

score 3

前提・実現したいこと

Ruby on Rails5で作ったアプリをEC2デプロイ。
Capistranoを使用し、Nginxとunicornを使用。
参考にしたサイト: http://qiita.com/naoki_mochizuki/items/657aca7531b8948d267b

発生している問題・エラーメッセージ

アプリのルートファイルが表示されないです。
bundle exec cap production deployを実行し、デプロイは完了しました。
Nginxを起動し、サイトを表示させようとしたのですが、
「Welcome to nginx on the Amazon Linux AMI!」
の画面になってしまいました。
その後、/etc/nginx/nginx.confのrootを以下のように /var/www/introduction/current/publicと編集したのですが、「403 Forbidden」と表示されてしまいました。

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    include /etc/nginx/conf.d/*.conf;

    index   index.html index.htm;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  localhost;
        root         /var/www/introduction/current/public;

        include /etc/nginx/default.d/*.conf;

        location / {

        }

        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
}


エラーメッセージは

`2017/03/18 09:41:08 [error] 6367#0: *92 directory index of "/var/www/introduction/current/public/" is forbidden, client: 60.135.210.91, server: localhost, request: "GET / HTTP/1.1", host: "www.(省略)"`


となっております。

パーミッションは、/var/www/introduction/current/public
var 755
www 755
introduction 755
current 777
でした。

その他の設定ファイル

/etc/nginx/conf.d/introduction.conf は以下のように設定してあります。

error_log  /var/www/introduction/current/log/nginx.error.log;
access_log /var/www/introduction/current/log/nginx.access.log;

client_max_body_size 2G;
upstream app_server {
    server unix:/var/www/introduction/current/tmp/sockets/.unicorn.sock fail_timeout=0;
}

server {
    listen 80;
    server_name 127.0.0.1;
    keepalive_timeout 5;
    root /var/www/introduction/current/public;

    try_files $uri/index.html $uri.html $uri @app;

    location @app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://app_server;
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /var/www/introduction/current/public;
    }
  }


またunicornnの方は、/var/www/introduction/current/config/unicornにて、以下のように設定されています。

$worker  = 2
$timeout = 30

$app_dir = "/var/www/introduction/current"

$listen  = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir
$pid     = File.expand_path 'tmp/pids/unicorn.pid', $app_dir
$std_log = File.expand_path 'log/unicorn.log', $app_dir

worker_processes  $worker
working_directory $app_dir
stderr_path $std_log
stdout_path $std_log
timeout $timeout
listen  $listen
pid $pid

preload_app true

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      Process.kill "QUIT", File.read(old_pid).to_i
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

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

追記 /etc/nginx/conf.d/introduction.confの設定を修正した結果

「このページは動作していません
www.ateam17-introduce.xyz では現在このリクエストを処理できません。
HTTP ERROR 500」
と表示されました。
unicorn.logには以下のように表示されました。

E, [2017-03-21T17:50:24.305630 #20611] ERROR -- : app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
E, [2017-03-21T17:50:24.305755 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:513:in `validate_secret_key_config!'
E, [2017-03-21T17:50:24.305791 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:246:in `env_config'
E, [2017-03-21T17:50:24.305816 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:693:in `build_request'
E, [2017-03-21T17:50:24.305840 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:521:in `build_request'
E, [2017-03-21T17:50:24.305862 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:521:in `call'
E, [2017-03-21T17:50:24.305884 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:562:in `process_client'
E, [2017-03-21T17:50:24.305905 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:658:in `worker_loop'
E, [2017-03-21T17:50:24.305922 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:508:in `spawn_missing_workers'
E, [2017-03-21T17:50:24.305943 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:132:in `start'
E, [2017-03-21T17:50:24.305957 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/bin/unicorn:126:in `<top (required)>'
E, [2017-03-21T17:50:24.305975 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/bin/unicorn:23:in `load'
E, [2017-03-21T17:50:24.306012 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/bin/unicorn:23:in `<main>'

追記2 secret_key_base のエラーに関して

アプリのconfig/deploy.rbにて、

〜
set :linked_files, fetch(:linked_files, []).push('config/settings.yml')

と書いた後、/var/www/introduction/shared/config/settings.yml

production:
  secret_key_base: ~~~


を記入し、デプロイをしましたが、

Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)


が発生したままです。

追記2に関して試したこと

・デプロイ後のsecrets.ymlに直接記入
export SECRET_KEY_BASE=〜〜〜
~/.bashrc~/.bash_profileの中にexport SECRET_KEY_BASE=〜〜〜を記入

echo $SECRET_KEY_BASEを実行するとターミナル上では表示されるのですが、unicornをリスタートさせても同じエラーのままでした。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • konake15

    2017/03/20 16:57 編集

    >ikedasさん ごめんなさい、この分野は初心者なので詳しくは分からないです。アプリを作成し、ローカルからAWSにデプロイし、Nginxを起動しました。その後、自分の同じPCでhttp://127.0.0.1/にアクセスしました。

    キャンセル

  • ikedas

    2017/03/20 17:35

    ええと、nginxはご自分のPCにインストールした、ということであっていますか。

    キャンセル

  • konake15

    2017/03/20 21:29

    >ikedasさん あ、違います。EC2インスタンスにインストールしました。

    キャンセル

回答 1

checkベストアンサー

+1

nginxの設定について回答します。

まず、/etc/nginx/nginx.confの設定内容は今回の設定に関係ありません。同ファイルを変更した箇所は、元に戻してかまいません。


/etc/nginx/conf.d/introduction.confの設定について。

server節でserver_name 127.0.0.1;としていますが、これではhttp://127.0.0.1/にアクセスしたときしかこのserver節は使われません。つまり、サーバ外からこのサーバにアクセスできません。ですのでここはサーバのFQDNを指定します。当然、DNSで名前解決できるホスト名でなければいけません (レコードはA、AAAA、CNAMEのいずれでもいいです)。

server {
   ...
   server_name サーバのFQDN;
   ...


修正したら、nginxを再起動し、http://サーバのFQDN/にアクセスして動作確認してみて下さい。何か問題が起きたら、エラーメッセージとサーバのログを質問に追記下さい。


(追記)

修正後、unicornのエラーログが出るようになりましたから、nginxからunicornへリクエストを中継することはできるようになったということですね。

unicornが正常に動かない点ですが、参考になさったサイトの説明をもう一度見直して、Capistranoやunicornに設定漏れがないかご確認下さい。それでもうまくいかなければ、あらためてご質問下さい。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/03/21 17:53 編集

    「このページは動作していません
    www.ateam17-introduce.xyz では現在このリクエストを処理できません。
    HTTP ERROR 500」
    と表示されました。
    unicorn.logには以下のように表示されました。

    ```
    E, [2017-03-21T17:50:24.305630 #20611] ERROR -- : app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
    E, [2017-03-21T17:50:24.305755 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:513:in `validate_secret_key_config!'
    E, [2017-03-21T17:50:24.305791 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:246:in `env_config'
    E, [2017-03-21T17:50:24.305816 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:693:in `build_request'
    E, [2017-03-21T17:50:24.305840 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/application.rb:521:in `build_request'
    E, [2017-03-21T17:50:24.305862 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/railties-5.0.0.1/lib/rails/engine.rb:521:in `call'
    E, [2017-03-21T17:50:24.305884 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:562:in `process_client'
    E, [2017-03-21T17:50:24.305905 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:658:in `worker_loop'
    E, [2017-03-21T17:50:24.305922 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:508:in `spawn_missing_workers'
    E, [2017-03-21T17:50:24.305943 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/lib/unicorn/http_server.rb:132:in `start'
    E, [2017-03-21T17:50:24.305957 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/gems/unicorn-5.2.0/bin/unicorn:126:in `<top (required)>'
    E, [2017-03-21T17:50:24.305975 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/bin/unicorn:23:in `load'
    E, [2017-03-21T17:50:24.306012 #20611] ERROR -- : /var/www/introduction/shared/bundle/ruby/2.3.0/bin/unicorn:23:in `<main>'
    ```

    キャンセル

  • 2017/03/21 18:12

    nginxからunicornへリクエストを中継することはできるようになりましたね。nginxの設定はこれで解決ですね。あとはunicornの設定を直せばいいです。ログに出力されているメッセージの意味を調べてみて下さい。

    なお、エラーメッセージやサーバのログは、ご質問に追記下さい。

    キャンセル

  • 2017/03/21 22:24

    ありがとうございます。Nginxのエラーは解決しました。

    しかし、unicornのエラーは消えないままです。
    参考にしたサイトの通りに、シンボリックリンクを渡したのですが、secret_key_baseのエラーが出たままです。

    キャンセル

  • 2017/03/22 14:19

    参考になさったサイトを、一番最初から順を追って見直し、設定などに漏れがないか確認してみて下さい。

    キャンセル

同じタグがついた質問を見る

  • Ruby on Rails

    8857questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • AWS(Amazon Web Services)

    2536questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • nginx

    1034questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • Capistrano

    155questions

    Rubyで書かれたサーバオーケストレーションで、複数のサーバでスクリプトを実行する際に用いられます。主な使用用途はWebアプリケーションのデプロイメントです。 アプリケーションのバージョンアップ自動化、およびデータベースの変更などもできます。

  • unicorn

    123questions

    Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。