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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

RSpec

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

Ruby on Rails

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

Docker

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

Circle CI

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

Q&A

解決済

1回答

3156閲覧

CircleCIでRspecを走らせるとエラーが出る

mikepp

総合スコア11

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

RSpec

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

Ruby on Rails

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

Docker

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

Circle CI

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

0グッド

0クリップ

投稿2020/08/24 04:54

編集2020/08/24 10:49

質問内容

自作のRailsアプリを使ってCircleCIでRspecを走らせようとしたところ、エラーが発生してしまいました。

はじめは「bundlerのバージョンが2以上でないといけない」というエラーだったので

・環境変数にbundlerのバージョンを2.1.4に設定
・bundlerを一旦アンインストールしてから、再度指定のバージョンを入れ直すコマンドをconfig.ymlに追加

上記2点を行いましたが、以下のエラーコードが新たに出てしまいました。

アドバイスいただければ幸いです。よろしくお願いいたします。

開発環境

Ruby 2.5.1
Rails 5.2.4.3
Docker

エラーコード

console

1~@yk golfour_aws % circleci local execute 2・・・ 3====>> setup bundler 4 #!/bin/bash -eo pipefail 5sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler 6ERROR: While executing gem ... (ArgumentError) 7 Malformed version number string sudo 8Error: 9Exited with code exit status 1 10 11Step failed 12Error: runner failed (exited with 101) 13Task failed 14Error: task failed

参照ファイル

.config/config.yml

version: 2.1 orbs: ruby: circleci/ruby@1.1.0 jobs: build: docker: - image: circleci/ruby:2.5.1-node-browsers steps: - checkout - run: name: setup bundler command: sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler - ruby/install-deps test: parallelism: 3 docker: - image: circleci/ruby:2.5.1-node-browsers environment: DB_HOST: 127.0.0.1 RAILS_ENV: test BUNDLER_VERSION: 2.1.4 - image: circleci/mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_USER: yuki MYSQL_DB: golfour_test steps: - checkout - run: name: setup bundler command: sudo gem update --system sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler - ruby/install-deps - run: name: Wait for DB command: dockerize -wait tcp://localhost:3306 -timeout 1m - run: name: Database setup command: bundle exec rails db:schema:load --trace # Run rspec in parallel - ruby/rspec-test - ruby/rubocop-check workflows: version: 2 build_and_test: jobs: - build - test: requires: - build

docker-compose.yml

version: '3' services: db: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: golfour_development MYSQL_USER: yuki MYSQL_PASSWORD: password TZ: Asia/Tokyo volumes: - ./mysql/mysql_data:/var/lib/mysql - ./logs:/var/log/mysql - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf ports: - "4306:3306" db-test: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: golfour_test MYSQL_USER: yuki MYSQL_PASSWORD: password TZ: Asia/Tokyo volumes: - ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf tmpfs: - /var/lib/mysql - /var/log/mysql ports: - "5306:3306" web: build: context: . dockerfile: Dockerfile command: /bin/sh -c "rm -f /workdir/tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" tty: true stdin_open: true environment: # RspecのSystem-specを利用するために追加 - "SELENIUM_DRIVER_URL=http://selenium_chrome:4444/wd/hub" depends_on: - db - db-test ports: - "3000:3000" volumes: - .:/workdir # RspecのSystem-specを利用するために追加 selenium_chrome: image: selenium/standalone-chrome-debug logging: driver: none

Dockerfile

FROM ruby:2.5.1 RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/* RUN mkdir /workdir WORKDIR /workdir ADD Gemfile /workdir/Gemfile ADD Gemfile.lock /workdir/Gemfile.lock ENV BUNDLER_VERSION 2.1.4 RUN gem install bundler RUN bundle install ADD . /workdir

追記

## 最初に発生したエラーメッセージ

console

1~@yk golfour_aws % circleci local execute 2・・・ 3Gemfile.lock is bundled with bundler version 2.1.4 4Installing bundler 2.1.4 5Fetching: bundler-2.1.4.gem (100%) 6Successfully installed bundler-2.1.4 71 gem installed 8/bin/bash: line 21: ./vendor/bundle: No such file or directory 9You must use Bundler 2 or greater with this lockfile. 10You must use Bundler 2 or greater with this lockfile. 11Error: 12Exited with code exit status 20 13 14Step failed

このエラーメッセージからこの記事を参考に、bundlerのバージョンを指定する方法を実装。

追記2

修正したソースコード .config/config.yml

version: 2.1 orbs: ruby: circleci/ruby@1.1.0 jobs: build: docker: - image: circleci/ruby:2.5.1-node-browsers environment: BUNDLER_VERSION: 2.1.4 #修正箇所 steps: - checkout - ruby/install-deps test: parallelism: 3 docker: - image: circleci/ruby:2.5.1-node-browsers environment: DB_HOST: 127.0.0.1 RAILS_ENV: test BUNDLER_VERSION: 2.1.4 - image: circleci/mysql:8.0 command: --default-authentication-plugin=mysql_native_password environment: MYSQL_USER: yuki MYSQL_DB: golfour_test steps: - checkout - ruby/install-deps - run: name: Wait for DB command: dockerize -wait tcp://localhost:3306 -timeout 1m - run: name: Database setup command: bundle exec rails db:schema:load --trace # Run rspec in parallel - ruby/rspec-test - ruby/rubocop-check workflows: version: 2 build_and_test: jobs: - build - test: requires: - build

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

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

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

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

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

naokit-dev

2020/08/24 05:26

sudo gem uninstall bundler sudo rm /usr/local/bin/bundle sudo rm /usr/local/bin/bundler sudo gem install bundler いったんアンインストールしようとしている意図、 それに至ったソース等あればおしえていただけますか?
mikepp

2020/08/24 05:34

ご回答ありがとうございます。 質問に追記しました。 よろしくお願いいたします。
naokit-dev

2020/08/24 05:41

参照もと記事はdockerコンテナ上での動作を想定していないと思います Buildしてコンテナを立ち上げるということは 独立した新しい環境?を構築していることであり 以前の環境に依存しないので、そもそもアンインストールが不要 bundlerのバージョンだけ指定し直して、今まで通りbuildでよいと思うのですが 試していただけますか?
guest

回答1

0

ベストアンサー

参照もと記事はdockerコンテナ上での動作を想定していないと思います

Buildしてコンテナを立ち上げるということは
独立した新しい環境?を構築していることであり
以前の環境に依存しないので、そもそもアンインストールが不要
bundlerのバージョンだけ指定し直して、今まで通りbuildでよいと思うのですが
試していただけますか?

投稿2020/08/24 05:42

naokit-dev

総合スコア424

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

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

naokit-dev

2020/08/24 05:44

加えて、CircleCI上のbundlerはローカル環境のbundlerと同じバージョンにするべきだと思います
mikepp

2020/08/24 05:58

回答ありがとうございます。 ご指摘通り、bundlerのバージョンのみ指定し、アンインストールするコマンドを削除してcircleciを実行したところ、追記した’最初に発生したエラーメッセージ’と同様のエラーが発生してしまいました。
naokit-dev

2020/08/24 10:10

参考記事についてCircleCi環境についても記載されていましたね、失礼いたしました 対症療法的アプローチですが Orbを使用して ``` - ruby/install-deps ``` とされており、 ソースコードを見るとこれはデフォルトでbundler 2.1.4を使用してbundle installするようになっているようなので run...の部分を一切省略してみてはいかがでしょうか? [CircleCI Orb Registry - circleci/ruby](https://circleci.com/orbs/registry/orb/circleci/ruby?version=1.0.0)
mikepp

2020/08/24 10:41

解決しました! bundlerの環境変数を記述する場所が間違っていました... 本来buildの部分にも記述するべきところを、testの部分しか記述していなかったため環境変数が適切に適用されていなかったようです。 ご指摘いただいたおかげで、問題を整理して原因を発見することができました! ありがとうございました!
naokit-dev

2020/08/24 10:44

よかったです元のソースを残したまま、改善後のソースを貼っておくと他の方の役にたつかもしれません
mikepp

2020/08/24 10:47

承知しました。 修正したコードを質問内容に追試します。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問