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

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

ただいまの
回答率

88.91%

Rails 本番環境でWe're sorry, but something went wrong.の原因が探せない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 236

moai891

score 9

Rails + unicorn + ngnix + mysqlの本番環境でWe're sorry, but something went wrong.が立ち上げ直後から出るのですが、unicornでエラーログが見えず、原因が追求できません。タイトルのエラーはRailsから出力されると思うのですが、他に考えられるエラーはありますでしょうか?

仮説として、本番環境のmysqlにデータが入っていないことが考えております。

恐れ入りますが、アドバイスお願いします。

ローカル環境でのrootページの出力⇨問題なし
https://gyazo.com/2dc02bda8aa128731cc1abaadaa1a860

本番環境
Railsアプリディレクトリ配下

  • production.log
D, [2020-07-08T13:15:59.436527 #6022] DEBUG -- :    (0.2ms)  SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
D, [2020-07-08T13:23:49.515316 #3327] DEBUG -- :    (5.7ms)  SET NAMES utf8mb4,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
  • unicorn.stderr.log
I, [2020-07-08T13:23:46.876955 #3327]  INFO -- : Refreshing Gem list
I, [2020-07-08T13:23:49.503199 #3327]  INFO -- : unlinking existing socket=/var/www/badsuru/tmp/sockets/unicorn.sock
I, [2020-07-08T13:23:49.503348 #3327]  INFO -- : listening on addr=/var/www/badsuru/tmp/sockets/unicorn.sock fd=9
I, [2020-07-08T13:23:49.517646 #3327]  INFO -- : master process ready
I, [2020-07-08T13:23:49.523079 #3330]  INFO -- : worker=0 ready
  • routes.rb
Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations',
  }
  devise_scope :user do
    get 'profiles', to: 'users/registrations#new_profile'
    post 'profiles', to: 'users/registrations#create_profile'
  end
  root 'home#index'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end
  • unicorn.rb
#サーバ上でのアプリケーションコードが設置されているディレクトリを変数に入れておく
app_path = File.expand_path('../../', __FILE__)

#アプリケーションサーバの性能を決定する
worker_processes 1

#アプリケーションの設置されているディレクトリを指定
working_directory app_path

#Unicornの起動に必要なファイルの設置場所を指定
pid "#{app_path}/tmp/pids/unicorn.pid"

#ポート番号を指定
listen "#{app_path}/tmp/sockets/unicorn.sock"

#エラーのログを記録するファイルを指定
stderr_path "#{app_path}/log/unicorn.stderr.log"

#通常のログを記録するファイルを指定
stdout_path "#{app_path}/log/unicorn.stdout.log"

#Railsアプリケーションの応答を待つ上限時間を設定
timeout 60

#以下は応用的な設定なので説明は割愛

preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true

check_client_connection false

run_once = true

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

  if run_once
    run_once = false # prevent from firing again
  end

  old_pid = "#{server.config[:pid]}.oldbin"
  if File.exist?(old_pid) && server.pid != old_pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH => e
      logger.error e
    end
  end
end

after_fork do |_server, _worker|
  defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end 
  • etc/nginx/conf.d/rails.conf(URLとIPアドレスは個人情報保護のため割愛) 
upstream app_server {
  server unix:/var/www/〇〇/shared/tmp/sockets/unicorn.sock;
}

# {}で囲った部分をブロックと呼ぶ。サーバの設定ができる
server {
  # このプログラムが接続を受け付けるポート番号
  listen 80;
  # 接続を受け付けるリクエストURL ここに書いていないURLではアクセスできない
  server_name 〇〇;

  # クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなの>で大きめにしておく
  client_max_body_size 2g;

# 接続が来た際のrootディレクトリ
  root /var/www/〇〇/public;

# assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定
  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

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

  location @unicorn {
    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;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • moai891

    2020/07/10 15:46 編集

    > どこを見てよいかわからないのでしたら、Started から次にStartedまでを載せてください

    勉強不足で誠に申し訳ございません。どのファイルのStartedを掲載すれば良いでしょうか?
    log/unicorn.stderr.logと、log/production.logは見たのですが、「Started」の文言がありませんでした。

    また、Google検証ツールで以下のエラー文は見つけました
    Failed to load resource: the server responded with a status of 502 (Bad Gateway)

    キャンセル

  • winterboum

    2020/07/10 16:25

    500でなく502ですか。
    ですと unicorn と ngnix の接続ができていないようです

    キャンセル

  • moai891

    2020/07/11 00:37 編集

    ありがとうございます。502エラーの原因が解決できました。
    しかしながら、今度は500エラーが生じました。お心当たりある解決法をご存知でしょうか?

    /var/log/nginx/error.logの内容

    2020/07/10 15:33:10 [error] 2973#0: *1 connect() to unix:/var/www/app_name/tmp/sockets/unicorn.sock failed (111: Connection refused) while connecting to upstream, client: ××××××××××, server: ×××××××××××, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/app_name/tmp/sockets/unicorn.sock:/", host: "××××××××××"

    キャンセル

回答 2

check解決した方法

0

自己解決しました。

再度rails.confを記述し直し、アセットプリコンパイルをしたら500エラーも解決され、無事トップページが表示されました。ご協力頂き、誠にありがとうございました!!

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

自己解決しました。

再度rails.confを記述し直し、アセットプリコンパイルをしたら500エラーも解決され、無事トップページが表示されました。ご協力頂き、誠にありがとうございました!!

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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