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

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

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

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

Ruby on Rails

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

754閲覧

RailsアプリをEC2にデプロイする際のDockerfileのbundlerについて

Harluz

総合スコア19

docker-compose

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

Ruby on Rails

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2020/09/22 06:21

RailsアプリをAWSにデプロイするための設定を行っているが、EC2にSSHでログインした状態で、docker-compose up を実行する必要が生じた。(下記URLを参考に導入中)
https://qiita.com/naoki_mochizuki/items/5a1757d222806cbe0cd1

ec2内にdocker docker-compose はインストールし、コマンド操作できるところまで辿り着き、docker-compose up -dを実行した。
その際に、up -dコマンド自体は正常に動作していると思うが、gemのインストールの際に下記エラーメッセージが表示される(抜粋)

Warning: the running version of Bundler (1.17.2) is older than the version that created the lockfile (1.17.3). We suggest you upgrade to the latest version of Bundler by running gem install bundler.

Installing nokogiri 1.10.9 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

bundlerのバージョンが違うが?というエラーによって、nokogiriがインストールされない?と考えております。

エラー文にあるように、gem install bundler を実行してみ?とあるが、そもそもdockerのビルドに失敗しているわけで、
docker-compose run app(アプリ名) gem install bundler
を実行しようにも、コンテナが作成されていないため、実行できません。

dokcer環境で、bundlerのバージョンを指定した状態で、実行する方法はあるのでしょうか?
もしくは、問題点が全く別の箇所にある場合も、ご教示いただければ助かります。

Gemfile

# frozen_string_literal: true source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '~> 5.2.4', '>= 5.2.4.3' gem 'bcrypt' # Use mysql as the database for Active Record gem 'mysql2', '>= 0.4.4', '< 0.6.0' # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'mini_racer', platforms: :ruby # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.5' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use ActiveStorage variant # gem 'mini_magick', '~> 4.8' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.1.0', require: false gem 'bootstrap', '~> 4.1.1' gem 'jquery-rails' gem 'faker' group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails', '~> 3.7' gem 'rails-controller-testing' gem 'factory_bot_rails', '~> 4.11' end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-commands-rspec' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of chromedriver to run system tests with Chrome gem 'chromedriver-helper' gem 'webdrivers' end gem 'devise' # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] group :development, :staging do gem 'rubocop', '~> 0.82.0', require: false end group :production do gem 'puma_worker_killer' end

Dockerfile

FROM ruby:2.6.3 # リポジトリを更新し依存モジュールをインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs # ルート直下にmy_appという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) RUN mkdir /my_app WORKDIR /my_app # ホストのGemfileとGemfile.lockをコンテナにコピー ADD Gemfile /my_app/Gemfile ADD Gemfile.lock /my_app/Gemfile.lock # bundle installの実行 RUN bundle install # ホストのアプリケーションディレクトリ内をすべてコンテナにコピー ADD . /my_app # puma.sockを配置するディレクトリを作成 RUN mkdir -p tmp/sockets

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

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

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

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

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

guest

回答1

0

ベストアンサー

Gemfile.lock をエディターで開き、内容を削除して保存し、ビルドし直すと動作します

イメージのビルドが完了したら、Gemfile.lock を取り出して更にもう一度ビルドし直します

Gemfile.lock は次のコマンドで取り出せます:

console

1docker run --rm <ビルドしたイメージの ID> cat /myapp/Gemfile.lock > Gemfile.lock

投稿2020/09/22 08:12

y_shinoda

総合スコア3272

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

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

Harluz

2020/09/22 08:25

Gemfile.lockの中身を空にして、ビルドし直しました。 先ほどのbundlerのバージョンについてのwarning文は消えましたが、nokogiriのインストールの際に本文と同じエラーが発生します。 本文では抜粋しておりますが、下記の内容が吐かれております。 Installing nokogiri 1.10.10 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /usr/local/bundle/gems/nokogiri-1.10.10/ext/nokogiri /usr/local/bin/ruby -I /usr/local/lib/ruby/2.6.0 -r ./siteconf20200922-6-1hdt6er.rb extconf.rb extconf failedCannot allocate memory - /usr/local/bin/ruby Gem files will remain installed in /usr/local/bundle/gems/nokogiri-1.10.10 for inspection. Results logged to /usr/local/bundle/extensions/x86_64-linux/2.6.0/nokogiri-1.10.10/gem_make.out An error occurred while installing nokogiri (1.10.10), and Bundler cannot continue. Make sure that `gem install nokogiri -v '1.10.10' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: rails was resolved to 5.2.4.4, which depends on actioncable was resolved to 5.2.4.4, which depends on actionpack was resolved to 5.2.4.4, which depends on actionview was resolved to 5.2.4.4, which depends on rails-dom-testing was resolved to 2.0.3, which depends on nokogiri ERROR: Service 'app' failed to build : The command '/bin/sh -c bundle install' returned a non-zero code: 5
y_shinoda

2020/09/22 08:42

extconf failedCannot allocate memory 上記の一文が気になります インスタンスタイプを上げて様子を見るか、 イメージを予め別の環境でビルドして Docker Hub または Amazon ECR などのレジストリーに push しておいたものを EC2 上で pull するようにしてみるなどすると良いかもしれません https://aws.amazon.com/jp/ec2/instance-types/ https://docs.docker.com/docker-hub/repos/ https://docs.docker.com/docker-hub/#step-4-build-and-push-a-container-image-to-docker-hub-from-your-computer こちらの環境 (Windows PC メモリー 16GB) では問題なくビルドできました
Harluz

2020/09/25 13:51

返答が遅くなってしまって申し訳ありません。 少し質問が変わってしまうのですが、dockerhubにはイメージをpushし、そのイメージをEC2内でpullするのは理解できます。(実際に動作するかはいまだ確認しておりません。) しかし、開発途中でgemfile等を変更した場合は、再ビルドしたイメージをdockerhubにpushし、それをEC2でまたpullするという流れなのでしょうか?すこし、手間に感じてしまいます。 開発環境と本番環境のイメージを連動する方法等はあるのでしょうか?
y_shinoda

2020/09/25 14:12

おおよそそのような理解で合っています 確かに、この方法は開発が完了してからデプロイが完了するまでに時間がかかるようになり、 これが旧来の方法に比べてデメリットであるとも言われています 時間はどうしようもないのですが、 デプロイ作業自体は Docker Hub の Automated Build や 各種 CI サービスを使い自動化したり 本番環境に AWS Fargate などコンテナ向けのサービスを利用することで 手間をなくすことができます (学習はかなり大変ですが)
Harluz

2020/09/25 14:55

ポートフォリオ作成中において、こまめにデプロイして動作確認したいと考えておりましたが、自動デプロイは学習コストが高いのですね、、、 仮に、開発環境でそのイメージが正常に動作したとしても、本番環境で動作するとは言い切れない?と思うのですが、ステージング環境を設け検証後、本番環境にデプロイするのが一般的なのでしょうか? ポートフォリオでそこまでやるかは私次第ではありますが、現場ではどうなっているのか興味があります。 (このトピックについてはこれ以上の私からの質問は控えます。)
y_shinoda

2020/09/25 15:07

例えば GitHub Actions 程度であれば、挙げた中ではそれほど学習コストは高くないです あくまで相対的な話であることと、僕が Ruby 学習者に向けて教えたことがないので 慣れるまでどのくらいかかるかはなんとも言えません 本番環境までにどれだけの環境と試験を挟むのかは プロダクトの性質や段階と、会社の意識によります
Harluz

2020/09/25 15:17

GitHub Actionは初めて聞きます。 提案していただいた方法を実行してみてつまづいたらまた質問を上げたいと思います。 脱線した質問も丁寧に答えていただき、また一つ頭のモヤモヤが解決できました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問