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

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

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

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

RSpec

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

Ruby on Rails

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

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

Q&A

解決済

1回答

1441閲覧

circleCIにて"bundle exec rspec" => "bundler: command not found"

matsu1226

総合スコア2

docker-compose

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

RSpec

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

Ruby on Rails

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

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

0グッド

0クリップ

投稿2021/07/19 14:44

編集2021/07/20 13:48

circleCIにてbundle exec rspecができない

前提・実現したいこと

circleCIにてCICDを実現したいです。
数十回こまごまとした修正をしているのですが、全く進展がないので
ご質問させていただきます。

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

circleci/config.yml↓

version: 2.1 orbs: ruby: circleci/ruby@1.1.2 # config.ymlのruby向け記法を導入 node: circleci/node@2 heroku: circleci/heroku@1.2.3 jobs: build: docker: - image: circleci/ruby:2.7-node working_directory: ~/repec-exercise-sho/src steps: - checkout: path: ~/repec-exercise-sho - ruby/install-deps test: docker: - image: circleci/ruby:2.7-node - image: circleci/mysql:5.5 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: app_test MYSQL_USER: root environment: BUNDLE_JOBS: "3" BUNDLE_RETRY: "3" APP_DATABASE_HOST: "127.0.0.1" RAILS_ENV: test working_directory: ~/repec-exercise-sho/src steps: - checkout: path: ~/repec-exercise-sho - ruby/install-deps - run: name: bundle install command: bundle install - run: name: Database setup command: bundle exec rake db:create - run: name: RSpec command: bundle exec rspec deploy: docker: - image: circleci/ruby:2.7 steps: - checkout - setup_remote_docker: version: 19.03.13 - heroku/install - run: name: heroku login command: heroku container:login - run: name: push docker image command: heroku container:push web -a $HEROKU_APP_NAME - run: name: release docker image command: heroku container:release web -a $HEROKU_APP_NAME - run: name: database setup command: heroku run bundle exec rake db:migrate RAILS_ENV=production -a $HEROKU_APP_NAME workflows: version: 2 build_test_and_deploy: jobs: - build - test: requires: - build - deploy: requires: - test filters: branches: only: main

Dockerfile↓

FROM ruby:2.7 ENV RAILS_ENV=production RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ && apt-get update -qq \ && apt-get install -y nodejs yarn build-essential default-mysql-client WORKDIR /app COPY ./src /app RUN bundle config --local set path 'vendor/bundle' \ && bundle install COPY start.sh /start.sh RUN chmod 744 /start.sh CMD [ "sh", "/start.sh" ]

start.sh↓

#! /bin/sh if [ "${RAILS_ENV}" = "production" ] then bundle exec rails assets:precompile fi bundle exec rails s -p ${PORT:-3000} -b 0.0.0.0

docker-compose.yml↓

version: '3' services: db: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password volumes: # - ./src/db/mysql_data:/var/lib/mysql - mysql_data:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: password MYSQL_USER: root web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - ./src:/app ports: - "3000:3000" depends_on: - db volumes: mysql_data:

circleCI実行結果↓
testジョブの最後でerrorとなります。

circleCI実行結果

ちなみにrspecの導入はうまくいっているように思います↓

試したこと

上記config.ymlでは
bundle exec rake db:create
となっていますが、
bundle exec rrails db:create
とした場合、同様のエラー(bundler: command not found: rails)となってしまいます。

docker-compose upをしてlocalhostで実行している場合はrspecも動作するため、
circleCI環境で、PATHをうまく拾えていないのかもしれないのですが、
ここからどのように進めていいかわかりません。。

補足情報

ruby 2.7.4
rails 6.1.4
Docker (docker engine 20.10.7), Docker-compose
RSpec 3.10 (rspec-rails 5.0.1)
circleCI version2
Heroku

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

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

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

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

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

Noin

2021/07/20 06:04

フルパスで実行したらどうなりますか? 以前curl実行する際にフルパスじゃないと動かなかったという事例があります。
matsu1226

2021/07/20 13:41

コメントいただきありがとうございます。 アドバイス参考に以下の通りフルパスでやってみましたが、 動きませんでした…。 ①コンテナ内に入る $ docker container exec -it rspec_exercise_web_1 bash ②”bundle exec rspec”のパスを調べる #which bundle exec rspec => /usr/local/bin/bundle /usr/local/bundle/bin/rspec ③circleci/config.ymlの記述を修正してgit push (修正前)bundle exec rspec (修正後)bundle exec /usr/local/bundle/bin/rspec circleCI 結果 bundler: command not found: /usr/local/bundle/bin/rspec Install missing gem executables with `bundle install`
Noin

2021/07/20 14:48

あぁ、すみません 逆です、bundlerの方です。 試しに docker [container] exec -it rspec_exercise_web_1 echo $PATH docker [container] exec -it rspec_exercise_web_1 /usr/local/bin/bundle config とかで/usr/local/binにPATHが通ってるか、bundleが実行できるかが知りたいです。
matsu1226

2021/07/21 00:41 編集

ありがとうございます。 お手数おかけします…。 わたくし自身、初心者なので前提知識が全然足りていないのだと思います…。 読みにくいかもしれませんが、ご確認いただけますと幸いです。 【A:コマンド修正】 【A-1】 「B:PATH検証」から、”/usr/local/bin”はPATHとして存在。 コマンドを修正。 【A-2】 念のため、circleCI実行前にlocalでコマンドが有効かを確認。 コンテナ内に入る $ docker container exec -it rspec_exercise_web_1 bash コマンド実行 # /usr/local/bin/bundle exec rspec ↓ ==== ...*................................* (略) 37 examples, 0 failures, 2 pending ==== 問題なさそう。 【A-3】circleci/config.ymlの記述を以下のように修正してgit push (修正前)bundle exec rspec (修正後)/usr/local/bin/bundle exec rspec 結果=>エラーです…。以下、circleCi画面です。。。 ==== #!/bin/bash -eo pipefail /usr/local/bin/bundle exec rspec bundler: command not found: rspec Install missing gem executables with `bundle install` Exited with code exit status 127 CircleCI received exit code 127 ==== 【B:PATH検証】 実行結果以下の通りです。 ①$docker container exec -it rspec_exercise_web_1 echo $PATH ↓ /usr/local/sbin /usr/local/bin ← ありました! /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /mnt/c/WINDOWS/system32 /mnt/c/WINDOWS /mnt/c/WINDOWS/System32/Wbem /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/ /mnt/c/WINDOWS/System32/OpenSSH/ /mnt/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL /mnt/c/Program Files/Intel/Intel(R) Management Engine Components/DAL /mnt/c/Program Files/Intel/WiFi/bin/ /mnt/c/Program Files/Common Files/Intel/WirelessCommon/ /mnt/c/HashiCorp/Vagrant/bin /mnt/c/Program Files/Git/cmd /mnt/c/Program Files/Docker/Docker/resources/bin /mnt/c/ProgramData/DockerDesktop/version-bin /mnt/c/Ruby27-x64/bin /mnt/c/Users/shotaro/AppData/Local/Microsoft/WindowsApps /mnt/c/Users/shotaro/AppData/Local/Programs/Microsoft VS Code/bin /mnt/c/Program Files/heroku/bin /snap/bin ②$ docker container exec -it rspec_exercise_web_1 /usr/local/bin/bundle config ↓ Settings are listed in order of priority. The top value will be used. set Set for your local app (/usr/local/bundle/config): "path vendor/bundle" silence_root_warning Set via BUNDLE_SILENCE_ROOT_WARNING: true app_config Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
Noin

2021/07/21 01:26 編集

gemファイルに記述されてる事を念の為確認して頂き ``` group :development, :test do ~ gem 'rspec-rails' ``` bundle install後にこちらを実行してみてください。 ``` rails g rspec:install ``` railsがrspecがないと言ってるので、とりあえず入れてみましょう。(入ってるとしても
matsu1226

2021/07/21 13:40

コメントありがとうございます。 gemファイルへの記載は漏れていませんでした。 (localではRSpecがうまく作動しています。) congig.ymlのbundle install後のところに、 rails g rspec:installを追記し、git pushしたのですが、 エラーでした…。 ↓ #!/bin/bash -eo pipefail rails g rspec:install /bin/bash: rails: command not found Exited with code exit status 127 CircleCI received exit code 127
guest

回答1

0

ベストアンサー

ソースが見にくいのでこちらに記載させて頂きます。

https://www.yokoyan.net/entry/2020/12/16/180000
ここと公式とcircleci/config.ymlを見比べてみました。

imageが違うのでどちらがいいのかわかりませんが、BUNDLE_PATHの指定とかenviromentが複数あったりとか違いがあったので部分的に書いてみました。
丸々上書きするとダメなので見比べて頂けると…
vendor/bundleを変数でもコマンドオプションでも指定してますが、どちらかで大丈夫なはずです。

test: docker: - image: circleci/ruby:2.7-node environment: BUNDLE_JOBS: "3" BUNDLE_RETRY: "3" BUNDLE_PATH: vendor/bundle APP_DATABASE_HOST: "127.0.0.1" RAILS_ENV: test working_directory: ~/repec-exercise-sho/src environment: BUNDLE_JOBS: "3" BUNDLE_RETRY: "3" APP_DATABASE_HOST: "127.0.0.1" RAILS_ENV: test steps: - checkout: path: ~/repec-exercise-sho - ruby/install-deps - node/install-packages: pkg-manager: yarn cache-key: "yarn.lock" - run: name: bundle install command: bundle check --path=vendor/bundle ||bundle install --path=vendor/bundle - run: name: Database setup command: bundle exec rake db:create - run: name: RSpec command: bundle exec rspec

投稿2021/07/23 16:19

Noin

総合スコア188

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

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

matsu1226

2021/07/28 06:02

遅くなって申し訳ございません。 BUNDLE_PATH: vendor/bundle を追記して実行したのですが、結果は変わらずでした。 しかしながら、gemfileにいくつかGEMを追加して 再度git pushをしたところ、circleCI上でbundle installが再度実行され、 うまくRSpecまで動作しました。 ご丁寧に指導いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問