前提・実現したいこと
ec2上でdocker-composeを使用しrailsアプリを立ち上げるが
No such file or directoryエラーが発生しcssが反映されない
行った手順
1 webコンテナ内にnode.js.yarnをインストール
2 以下コマンド実行
$docker-compose run web bundle exec rake assets:precompile RAILS_ENV=production
コマンド実行後の結果
I, [2020-11-05T04:26:10.531648 #1] INFO -- : Writing /myapp/public/assets/application-4122c59e9974a12cfc6eb9ab07c775381b1339358d7cf76ceeaae39bd007c680.js I, [2020-11-05T04:26:10.552228 #1] INFO -- : Writing /myapp/public/assets/application-4122c59e9974a12cfc6eb9ab07c775381b1339358d7cf76ceeaae39bd007c680.js.gz I, [2020-11-05T04:26:10.715500 #1] INFO -- : Writing /myapp/public/assets/application-d862790037b7672926579474fbe8292cf57ebaeafc19b449c4f615a87b4f7075.css I, [2020-11-05T04:26:10.716247 #1] INFO -- : Writing /myapp/public/assets/application-d862790037b7672926579474fbe8292cf57ebaeafc19b449c4f615a87b4f7075.css.gz
3 docker-compose up
エラーメッセージ
nginx_1 | 2020/11/05 04:29:21 [error] 7#7: *1 open() "/app/public/assets/application.self-14537b66cf3bc71446e497a541ef83b052cf0726bb340eac3f08b7e9bf0e9da3.css" failed (2: No such file or directory)
該当のソースコード
production.rb
Rails.application.configure do config.cache_classes = true config.eager_load = true config.consider_all_requests_local = false config.action_controller.perform_caching = true config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? config.assets.js_compressor = Uglifier.new(harmony: true) config.assets.compile = false config.active_storage.service = :local config.force_ssl = true config.log_level = :debug config.log_tags = [ :request_id ] config.action_mailer.perform_caching = false config.i18n.fallbacks = true config.active_support.deprecation = :notify config.log_formatter = ::Logger::Formatter.new if ENV["RAILS_LOG_TO_STDOUT"].present? logger = ActiveSupport::Logger.new(STDOUT) logger.formatter = config.log_formatter config.logger = ActiveSupport::TaggedLogging.new(logger) end # Do not dump schema after migrations. config.active_record.dump_schema_after_migration = false end
nignx.conf
upstream app { server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80; server_name localhost; # TODO keepalive_timeout 5; # static files root /app/public; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; # static files if (-f $request_filename) { break; } if (-f $request_filename.html) { rewrite (.*) $1/index.html break; } if (-f $request_filename.html) { rewrite (.*) $1.html break; } if (!-f $request_filename) { proxy_pass http://app; break; } } location ~* .(ico|css|gif|jpe?g|png|js)(?[0-9]+)?$ { expires max; break; } }
試したこと
1 手動でコンパイルしたassetsのディレクトリとnginxが読み込んでいるディレクトリにズレがある?
(手動でのコンパイル)
/myapp/public/assets
(nginx)
/app/public/assets
→nginx.confのドキュメントルートを/myapp/public/assetsに変更するがエラー解消せず
** 2 コンパイル後public配下にファイルは存在するか?**
$ docker-compose run web ls public/assets Creating myapp_web_run ... done application-084b9ffa601b37201c9fcc7a0c2bee2f5ebaae4be90bda0769f2a0f6fcc09cdb.js application-084b9ffa601b37201c9fcc7a0c2bee2f5ebaae4be90bda0769f2a0f6fcc09cdb.js.gz application-14537b66cf3bc71446e497a541ef83b052cf0726bb340eac3f08b7e9bf0e9da3.css application-14537b66cf3bc71446e497a541ef83b052cf0726bb340eac3f08b7e9bf0e9da3.css.gz exclusions.css-53c044d871c4ea98718fd024dd4c23a10163dceb3e59d3e7e86056c92bda73b1.map
→public/assets配下にコンパイル後のcss,js存在を確認
補足情報(FW/ツールのバージョンなど)
Rails 5.2
あなたの回答
tips
プレビュー