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

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

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

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

Ruby on Rails

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1361閲覧

docker * rails * nginx で public内のデータが反映されない

blo

総合スコア13

nginx

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

Ruby on Rails

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

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/11/24 07:39

前提・実現したいこと

public/robots.txt の変更を反映させたい

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

Rails を dockerで立てています。
public/robots.txt の内容を変更させてもhttps://localhost/robots.txtに反映されない

docker内のbashに入ってrobots.txtを変更すると反映されます
おそらくdockerのvolumeの問題と思っていますが、
何がどのようにすれば修正できるのか、何を調べるとわかるようになるのかわかりません。

該当のソースコード

docker

1version: "3.8" 2 3services: 4 web: 5 image: nginx:1.18 6 ports: 7 - "80:80" 8 volumes: 9 - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf 10 - public:/myapp/public 11 - log:/var/log/nginx 12 depends_on: 13 - app 14 15 db: 16 image: postgres:11.0-alpine 17 volumes: 18 - postgres:/var/lib/postgresql/data:cached 19 ports: 20 - "5432:5432" 21 environment: 22 23 TZ: Asia/Tokyo 24 25 app: 26 build: 27 context: . 28 image: rails_app 29 tty: true 30 stdin_open: true 31 command: bash -c "rm -f tmp/pids/server.pid && ./bin/rails s -p 3000 -b '0.0.0.0'" 32 volumes: 33 - .:/myapp:cached 34 - rails_cache:/myapp/tmp/cache:cached 35 - node_modules:/myapp/node_modules:cached 36 - yarn_cache:/usr/local/share/.cache/yarn/v6:cached 37 - bundle:/bundle:cached 38 - public:/myapp/public 39 - log:/myapp/log 40 tmpfs: 41 - /tmp 42 ports: 43 - "3000:3000" 44 environment: 45 46 depends_on: 47 - db 48 - webpacker 49 50 webpacker: 51 image: rails_app 52 command: ./bin/webpack-dev-server 53 volumes: 54 - .:/myapp:cached 55 - public:/myapp/public 56 - node_modules:/myapp/node_modules:cached 57 environment: 58 59 tty: false 60 stdin_open: false 61 ports: 62 - "3035:3035" 63 64volumes: 65 rails_cache: 66 node_modules: 67 yarn_cache: 68 postgres: 69 bundle: 70 public: 71 log: 72

試したこと

docker-compose down -v
をした後、
docker-compose up -d
をしたら反映されました。

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

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

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

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

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

motchang

2020/11/24 11:46

nginx のドキュメントルートが `/myapp/public` になっていないのではないでしょうか。 ./docker/nginx/default.conf の内容を追記していただけますか?
blo

2020/11/24 13:29

root は`/myapp/public`になっています ``` upstream puma { server app:3000; } server { listen 80; server_name localhost; location / { root /myapp/public; try_files $uri/index.html $uri @puma; } location @puma { 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://puma; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } ```
guest

回答1

0

ベストアンサー

ホスト側でホスト側にあるファイル robots.txt を編集するということですね?
上記質問は的を射ていませんでした。失礼しました。

今の docker-compose.yml の定義では Docker で管理されている public ボリュームが /webapp/public にマウントされてしまっているため、ホスト側のファイルが Docker 側にマウントされていないように見えます。

web コンテナの volumes の定義のうち、public ボリュームの定義を削除し以下の様にしていただくと質問が意図した動作になるとは思います。

yaml

1volumes: 2 - .:/webapp:cached

以下蛇足です。

ただし、こうしてしまうと webpacker コンテナで同様にマウントしている public ボリュームへの出力が web コンテナ(nginx)で読み取れなくなってしまうので、webpackerが意図通りに動作しなくなってしまうと思います。

robots.txt をホスト側で編集するという要件はクリアできますが、最終的に実現したいことはこれではないのではないでしょうか。

何かヒントになれば幸いです。

投稿2020/11/24 14:29

編集2020/11/26 02:17
motchang

総合スコア101

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問