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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

1回答

3671閲覧

Rails5 の production 環境にて static ファイルが Not Found になる

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2017/03/14 17:32

###前提・実現したいこと
Rails5 の production 環境にて static ファイルが Not Found になる
【環境】 Rails5 x nginx x unicorn

そもそもソースを右クリックで見ると assets というディレクトリを参照していないようです。
(※ プロジェクト作成後、トップページだけを作成して確認)

<!DOCTYPE html> <html> <head> <title>Myproject</title> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="hogehogehoge" /> <link rel="stylesheet" media="all" href="/stylesheets/application.css" data-turbolinks-track="reload" /> <script src="/javascripts/application.js" data-turbolinks-track="reload"></script> </head> <body> <h1>Top#index</h1> <p>Find me in app/views/top/index.html.erb</p> </body> </html>

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

The page you were looking for doesn't exist.

/etc/nginx/nginx.conf

user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; # Load dynamic modules. See /usr/share/nginx/README.fedora. 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; }

/etc/nginx/conf.d/service.conf

upstream unicorn { server unix:/www/myproject/tmp/unicorn.sock; } server { listen 80 default_server; } server { listen 80; server_name myproject.jp; access_log /var/log/nginx/myproject_access.log; error_log /var/log/nginx/myproject_error.log; root /www/myproject/public; # 一旦コメントアウトしている... #location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { # root /www/myproject/public; # break; #} #location ~ ^/assets/(.*) { # alias /www/myproject/public/assets/$1; #} error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } try_files $uri/index.html $uri @unicorn; location @unicorn { 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 http://unicorn; } }

###試したこと

$ RAILS_ENV=production bundle exec rake assets:precompile 実行をし、 /www/myproject/public/assets/ 配下にコンパイル済みのファイルが生成されております。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

直接の原因はわかりかねますが、私は次のように設定しています。参考まで。

nginx

1location ~ ^/assets/ { 2 root /www/myproject/public; 3 access_log off; 4 expires max; 5 add_header Cache-Control public; 6 add_header ETag ""; 7}

投稿2017/03/15 00:19

ryochin

総合スコア280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/03/15 00:56

回答ありがとうございます。同様の設定にしましたが、assets ディレクトリ配下を参照しませんでした。 config/environments/production.rb 以下の修正にて、 ``` #config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? config.public_file_server.enabled = true ``` Rails5でassetsをRailsに配信させる http://qiita.com/littlekbt/items/2cce848313b1f082e224 ``` <!DOCTYPE html> <html> <head> <title>Upsnap</title> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="0av26elHbiXq4vx9Rd8kD1WKP6jAjgS4pEqWVwv0+9LHZs961jgClBXspG4FCkVi4j2V/LzESWP8TkAU09z1DA==" /> <link rel="stylesheet" media="all" href="/assets/application-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855.css" data-turbolinks-track="reload" /> <script src="/assets/application-a80f58f188023146500821eee487b7a758d63a036abfc1f8938112793bd3b943.js" data-turbolinks-track="reload"></script> </head> <body> <h1>Top#index</h1> <p>Find me in app/views/top/index.html.erb</p> </body> </html> ``` ですが、これは Rails に静的ファイルを配信させているという状況なので、本当は nginx に配信させたいので、求めている状況ではないですね。。。 Rails に配信させる設定をすると、/assets/ ディレクトリを参照するようになるという事がとりあえずわかりました。もう少し、assets 関連の理解を深め噛み砕かないといけないような気がしております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問