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

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

新規登録して質問してみよう
ただいま回答率
85.49%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

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

Ruby on Rails 6

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Docker

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

Q&A

1回答

2452閲覧

Docker Rspecのテスト失敗時tmpファイルにスクリーンショットが保存されない

Kiyobun510

総合スコア12

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby

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

Ruby on Rails 6

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Docker

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

0グッド

0クリップ

投稿2020/09/05 11:12

編集2020/09/05 11:24

Docker+Nginx環境で開発しているのですが、Rspecのシステムスペックでテスト失敗時にtmp/screenshots/に画像が自動保存されるはずなのですが、保存されずtmpフォルダが空のままという状況です。(ちなみにいうとlogも出力されないです。からのフォルダのままです。)

screeenshotsフォルダを手動で作ったりしましたが変わりませんでした。おそらくDockerのtmpのマウントがうまくいっていないのかなと推測しているのですが、調べても同じ事例がでてこず完全に行き詰ってしまったのでご教授いただけますと大変助かります。

何卒宜しくお願い致します。
containar/Dockerfile(Nginx用

FROM nginx:1.15.8 # インクルード用のディレクトリ内を削除 RUN rm -f /etc/nginx/conf.d/* # Nginxの設定ファイルをコンテナにコピー COPY nginx.conf /etc/nginx/conf.d/webapp.conf # ビルド完了後にNginxを起動 CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf nginx.conf # プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream webapp { # ソケット通信したいのでpuma.sockを指定 server unix:///webapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name 192.168.hoge.hoge (念のため伏せています); access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /webapp/public; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; try_files $uri/index.html $uri @webapp; keepalive_timeout 5; # リバースプロキシ関連の設定 location @webapp { 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://webapp; } }

docker-compose.yml

version: '3' services: app: build: context: . env_file: - ./environments/db.env command: bundle exec puma -C config/puma.rb volumes: - .:/webapp - bundle:/bundle - public-data:/webapp/public - tmp-data:/webapp/tmp - log-data:/webapp/log depends_on: - db tty: true stdin_open: true db: image: mysql:5.7 env_file: - ./environments/db.env volumes: - db-data:/var/lib/mysql web: build: context: containers/nginx volumes: - public-data:/webapp/public - tmp-data:/webapp/tmp ports: - 80:80 depends_on: - app volumes: public-data: tmp-data: log-data: db-data: bundle: driver: local

Dockerfile(MySQL,Railsアプリ用)

Dockerfile

1FROM ruby:2.7.1 2 3# リポジトリを更新し依存モジュールをインストール 4RUN apt-get update -qq && \ 5 apt-get install -y build-essential \ 6 nodejs 7 8# yarnパッケージ管理ツールインストール 9RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 10 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 11 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 12 apt-get update && apt-get install -y yarn 13 14RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \ 15 && echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list \ 16 && apt-get update -qq \ 17 && apt-get install -y google-chrome-stable libnss3 libgconf-2-4 18 19# chromedriverの最新をインストール 20RUN CHROMEDRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` \ 21 && curl -sS -o /tmp/chromedriver_linux64.zip http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip \ 22 && unzip /tmp/chromedriver_linux64.zip \ 23 && mv chromedriver /usr/local/bin/ 24 25# Imagemagicをインストール 26RUN apt-get update && apt-get install -y imagemagick libmagick++-dev 27 28# Node.jsをインストール 29RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ 30 apt-get install -y nodejs 31 32# ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) 33RUN mkdir /webapp 34WORKDIR /webapp 35 36# ホストのGemfileとGemfile.lockをコンテナにコピー 37COPY Gemfile /webapp/Gemfile 38COPY Gemfile.lock /webapp/Gemfile.lock 39 40# bundle installの実行 41RUN bundle install 42 43# ホストのアプリケーションディレクトリ内をすべてコンテナにコピー 44COPY . /webapp 45 46# puma.sockを配置するディレクトリを作成 47RUN mkdir -p tmp/sockets 48

puma.rb

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } plugin :tmp_restart app_root = File.expand_path("../..", __FILE__) bind "unix://#{app_root}/tmp/sockets/puma.sock" stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

$ docker volume inspect webapp_tmp-dataの出力

[ { "CreatedAt": "2020-09-05T10:12:43Z", "Driver": "local", "Labels": { "com.docker.compose.project": "webapp", "com.docker.compose.version": "1.25.5", "com.docker.compose.volume": "tmp-data" }, "Mountpoint": "/var/lib/docker/volumes/webapp_tmp-data/_data", "Name": "webapp_tmp-data", "Options": null, "Scope": "local" } ]

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

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

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

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

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

unhappychoice

2020/09/05 12:03

テストのプロセスはどのように実行しているのでしょうか ( `docker run bin/rspec` ?
Kiyobun510

2020/09/05 12:14

度々ご回答いただきありがとうございます! docker-compose exec rspec spec/system/~ のような感じで実行しております。
guest

回答1

0

volumes: - .:/webapp - bundle:/bundle - public-data:/webapp/public - tmp-data:/webapp/tmp - log-data:/webapp/log

この様に書くと webapp/tmpはtmp-dataと同期されるのでローカルのtmpフォルダとdockerのwebapp/tmpは同期されないはずです。

多分nginx使う関係でtmpフォルダとpublicフォルダをnginxと同期したいので書いている感じですかね

tmpでもpublicでもlogでもない場所にスクリーンショットを吐き出して見てはどうでしょうか?

うまくいくかは分かりませんが

volumes: - .:/webapp - bundle:/bundle - public-data:/webapp/public - tmp-data:/webapp/tmp/sockets - log-data:/webapp/log

みたいな感じで指定するのもアリかもしれません

いずれにせと今のdocker-compose.ymlの書き方だとローカルのtmpフォルダとdockerのtmpフォルダは同期されないと思います。

投稿2020/09/07 10:59

編集2020/09/07 11:00
SibakenY

総合スコア63

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問