#現在の状況
- 現在、Capistranoを使用し、AWS(EC2)に自動デプロイを行っております。
- route53でドメインを設定し、本番環境にアクセスするとcssが適用されなくなりました。(アクセスは可)
- route53を使用する前のElastic IPで本番環境を確認すると正しく表示されます。
質問
cssが適用されない原因は何か?
適用されるまでに時間がかかるものなのか?
インフラ構築
エラー
ruby
1config/deploy/production.rb 2 3server 'Elastic IP', user: 'ec2-user', roles: %w{app db web}
ruby
1config/unicorn.rb 2 3app_path = File.expand_path('../../../', __FILE__) 4 5#アプリケーションサーバの性能を決定する 6worker_processes 1 7 8#アプリケーションの設置されているディレクトリを指定 9working_directory "#{app_path}/current" 10 11#Unicornの起動に必要なファイルの設置場所を指定 12pid "#{app_path}/shared/tmp/pids/unicorn.pid" 13 14#ポート番号を指定 15listen "#{app_path}/shared/tmp/sockets/unicorn.sock" 16 17#エラーのログを記録するファイルを指定 18stderr_path "#{app_path}/shared/log/unicorn.stderr.log" 19 20#通常のログを記録するファイルを指定 21stdout_path "#{app_path}/shared/log/unicorn.stdout.log" 22 23#Railsアプリケーションの応答を待つ上限時間を設定 24timeout 60 25 26#以下は応用的な設定なので説明は割愛 27 28preload_app true 29GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true 30 31check_client_connection false 32 33run_once = true 34 35before_fork do |server, worker| 36 defined?(ActiveRecord::Base) && 37 ActiveRecord::Base.connection.disconnect! 38 39 if run_once 40 run_once = false # prevent from firing again 41 end 42 43 old_pid = "#{server.config[:pid]}.oldbin" 44 if File.exist?(old_pid) && server.pid != old_pid 45 begin 46 sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU 47 Process.kill(sig, File.read(old_pid).to_i) 48 rescue Errno::ENOENT, Errno::ESRCH => e 49 logger.error e 50 end 51 end 52end 53 54after_fork do |_server, _worker| 55 defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection 56end
ruby
1config/deploy.rb 2 3lock '3.16.0' 4 5set :application, 'アプリ名' 6 7# どのリポジトリからアプリをpullするかを指定する 8set :repo_url, 'githubリポジトリ' 9 10# バージョンが変わっても共通で参照するディレクトリを指定 11set :linked_dirs, fetch(:linked_dirs, []).push('log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', 'public/system', 'public/uploads') 12 13set :rbenv_type, :user 14set :rbenv_ruby, '2.6.5' 15 16# どの公開鍵を利用してデプロイするか 17set :ssh_options, auth_methods: ['publickey'], 18 keys: ['#'] 19 20# プロセス番号を記載したファイルの場所 21set :unicorn_pid, -> { "#{shared_path}/tmp/pids/unicorn.pid" } 22 23# Unicornの設定ファイルの場所 24set :unicorn_config_path, -> { "#{current_path}/config/unicorn.rb" } 25set :keep_releases, 5 26 27# デプロイ処理が終わった後、Unicornを再起動するための記述 28after 'deploy:publishing', 'deploy:restart' 29namespace :deploy do 30 task :restart do 31 invoke 'unicorn:restart' 32 end 33end
ruby
1Capfile 2 3require "capistrano/setup" 4require "capistrano/deploy" 5require 'capistrano/rbenv' 6require 'capistrano/bundler' 7require 'capistrano/rails/assets' 8require 'capistrano/rails/migrations' 9require 'capistrano3/unicorn' 10 11Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r } 12
ruby
1capistrano.log 2 3WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB). 4This can impact web performance. 5Assets: 6 js/application-ea23ae402b20ce672355.js (541 KiB) 7 js/application-ea23ae402b20ce672355.js.map.gz (528 KiB) 8 js/application-ea23ae402b20ce672355.js.map.br (447 KiB) 9 10WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance. 11Entrypoints: 12 application (541 KiB) 13 js/application-ea23ae402b20ce672355.js 14 15 16WARNING in webpack performance recommendations: 17You can limit the size of your bundles by using import() or require.ensure to lazy load some parts of your application. 18For more info visit https://webpack.js.org/guides/code-splitting/ 19
Nginxエラーログ 2021/04/17 17:08:29 [error] 22948#0: *6 open() "/var/www/アプリケーション名/current/public/assets/application-796485acc5c1b3047846fd111ee629a32c9e3776a00951b710b65463d118fa3f.css" failed (2: No such file or directory), client: ~~~, server: Elastic IP名, request: "GET /assets/application-796485acc5c1b3047846fd111ee629a32c9e3776a00951b710b65463d118fa3f.css HTTP/1.1", host: "the-expenses.work", referrer: "http://the-expenses.work/users/sign_in"
/etc/nginx/conf.d/rails.conf upstream app_server { # Unicornと連携させるための設定 server unix:/var/www/The-Expenses-95/shared/tmp/sockets/unicorn.sock; } # {}で囲った部分をブロックと呼ぶ。サーバの設定ができる server { # このプログラムが接続を受け付けるポート番号 listen 80; # 接続を受け付けるリクエストURL ここに書いていないURLではアクセスできない server_name ElasticIP番号 the-expenses.work; # クライアントからアップロードされてくるファイルの容量の上限を2ギガに設定。デフォルトは1メガなので大きめにしておく client_max_body_size 2g; # 接続が来た際のrootディレクトリ root /var/www/The-Expenses-95/current/public; # assetsファイル(CSSやJavaScriptのファイルなど)にアクセスが来た際に適用される設定 location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; root /var/www/アプリケーション名/current/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; }
参考記事
以下の記事を参考にドメインを取得しました。
https://qiita.com/kono-hiroki/items/154e3ff96f7f63dc62cf
どなたかご教授いただけると幸いです。。
これだけだと何もわからないので、どのような構成かの説明を追記の上なにか現状の設定を貼ってください。
- 現状のアプリケーション・インフラ構成
Capistranoを使っているのでおそらくRailsだろうと思いますが、想像でしかないのでわかりません
何かミドルウェアや関連ツール(きっとnginxやunicornまたはpumaあたり)の設定があればそれも貼ってください。
- 該当のサイトにアクセスしたときに開発者ツール(F12)で見てみて、css読み込みにどのようなエラーがでているか
- Capistranoのデプロイで何を実行しているか
deploy.rbなどCapistrano周りの設定ファイルを貼ってください
すみません。情報不足でした。
よろしくお願いします。
まずはWEBブラウザのソースを見て、CSSのURLを直接確認して、そのURLにアクセスしてみたらどうなりますか? この手の不具合の多くはFQDNやパスが微妙に間違っていたり、httpとhttpsが間違っていたりとか、その手のやつですよ。 それでも分からなければサーバのログも確認してCSSのアクセスが来ているかどうか、来ているならどう返しているか(404なのか503なのか)とか、その辺もチェックしたらいいと思います。
ご回答ありがとうございます。
エラーログを見てみたのですが、原因がわかりませんでした。。。
追加で添付しております。
よろしくお願いします。
コンソールのエラー画像も追加いたしました。
404のログですがこれはWEBブラウザ側のログですよね? サーバ側にもログは出ていますか? まずはここが切り分けポイントで、サーバ側にログが来てないのであれば、httpとhttpsが間違ってるとか、FQDNが間違っているとかそっち方面を疑うべきでしょう。サーバ側にも同じようにNot Foundのログが出ているのであれば、404にならないように諸々の設定を変えるしかないと思います。デプロイはどうなっているのか? application-xxxx.cssというファイルがどこに配置されていていて、WEBサーバのドキュメントルートがどうなっているか?などをチェックして間違いを探すところから始めるべきかと。この辺の情報まで質問文に追記して頂ければ、原因を的確にアドバイスできる人が現れるかもしれませんが、現状だと404だけでは的確なアドバイスが来るのは期待薄な気もします。
ご回答ありがとうございます。
すみません。初歩的なことなのですが、サーバーサイドのエラーログの探し方がわからなくて。。
調べてみたのですが、出てこなくて。
教えていただけませんか?
sudo less /var/log/nginx/error.log
このコマンドをターミナルで入力し、エラーログが出てきたので追加で添付しております。
よろしくお願いします。
サーバ側にアクセスログがあるのであれば、原因は多少は絞らせそうですね。
/var/www/アプリケーション名/current/public/assets/application-796485acc5c1b3047846fd111ee629a32c9e3776a00951b710b65463d118fa3f.css
は存在しないんですよね? ですが、クライアント側としては存在しているものとしてアクセスが発生しているはずです。application-796485acc5c1b3047846fd111ee629a32c9e3776a00951b710b65463d118fa3f.css はサーバ上のどこにありますでしょうか? このファイルが違うディレクトリに存在するのであれば、Nginxの設定などを見直す必要がありそうです。
ただ、気になるのはクライアントのログとのファイル名が違うことです。なんかファイル名がもっと短いですよね・・・ 少なくともクライアントがあると思ってアクセスしているCSSファイルがサーバ上に存在しないのであれば、なぜこれが起こっているのかの原因をつかまないといけなさそうです。CSSファイルを生成する過程で何かしらミスが発生していそうな気もします。Rubyのフレームワークか何かでCSSファイルを生成しているのであれば、そちらが原因じゃないでしょうか?
回答1件
あなたの回答
tips
プレビュー