LoginSignup
28
13

More than 3 years have passed since last update.

Rails6の開発環境をDockerで構築しようとしたらドハマりした件

Posted at

概要

Dockerでの開発環境構築に慣れていない私は、練習がてら公式の手順を元にRailsの開発環境を構築してみることに。
https://docs.docker.com/compose/rails/

その時ハマった事象と解決方法のメモ。

落とし穴

最近 Rails6がリリース されたということで、せっかくだから使ってみるかな!
→それが悲劇の始まりとは知る由もなく...

Your Ruby version is 2.6.3, but your Gemfile specified 2.6.0 問題

事象

Build the Project の手順でdocker-compose build した時に出たエラーメッセージ。

$ docker-compose build
db uses an image, skipping
Building web
Step 1/15 : FROM ruby:2.6
 ---> 8fe6e1f7b421
Step 2/15 : RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
 ---> Using cache
 ---> b487730f3d14
  :
(中略)
  :
Step 9/15 : RUN bundle install
 ---> Running in 3e945eba544e
Your Ruby version is 2.6.3, but your Gemfile specified 2.6.0
ERROR: Service 'web' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 18

要するに、Gemfileで指定してるバージョンとアンタの環境のRubyバージョンが違ってまっせ、ということなんですが、これを解決するのにハマった。

解決プロセス

バージョン調査

バージョン違いまっせと言われているので、まずRubyのバージョンを確認するわけですが、この時にローカル環境のバージョンを確認したのが良くなかった。
コンテナ初級者あるある。

$ which ruby
/Users/username/.rbenv/shims/ruby

(デフォルトのパスではなく)rbenvで指定されたパスを指している。

$ ruby -v
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin18]

RubyのバージョンはGemfileの記述と同じく 2.6.0 である。

$ rbenv versions
  system
  2.3.0
  2.4.1
  2.5.1
  2.5.3
* 2.6.0 (set by /Users/username/Work/training/docker-begin/.ruby-version)

そもそもruby 2.6.3 はインストールすらされていない!
なんでだ!キーッ!!となったわけですが、、

そういや、コンテナに環境作るんだからローカルのインストール状況関係ないよね?

と思い直したのでした。

解決方法

DockerfileのFROM句では、マイナーバージョンを明示しない限り最新版が指定されるらしい。
例えば FROM ruby:2.6 とすると、その時最新バージョンである 2.6.3 と認識される模様。
:point_right: ソースは自身の試行錯誤

Dockerfileを確認するとまさに 2.6 としていたため、下記のように明示してやることで無事 docker-compose build 出来たのでした。

FROM ruby:2.6.0

rails server 立ち上がってない問題

事象

無事手順を終えウェルカムページが見れる状態になったハズなのですが、どういう訳か localhost:3000 にアクセス出来ない。

localhost 2019-08-20 19-21-39.png

コンテナは問題なく立ち上がっているはずなのに...

$ docker-compose ps
       Name                     Command               State           Ports         
------------------------------------------------------------------------------------
docker-begin_db_1    docker-entrypoint.sh postgres    Up      5432/tcp              
docker-begin_web_1   entrypoint.sh bash -c rm - ...   Up      0.0.0.0:3000->3000/tcp

なぜだ。

解決プロセス

docker logsしてみる

こんな時には docker logs するといいよ、とどこかの誰が言っていたのでやってみる。

$ docker logs docker-begin_web_1
=> Booting Puma
=> Rails 6.0.0 application starting in development 
=> Run `rails server --help` for more startup options
RAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environment
Exiting
/usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:91:in `rescue in load': Webpacker configuration file not found /myapp/config/webpacker.yml. Please run rails webpacker:install Error: No such file or directory @ rb_sysopen - /myapp/config/webpacker.yml (RuntimeError)
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:87:in `load'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:84:in `data'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:80:in `fetch'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:39:in `public_path'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:43:in `public_output_path'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/configuration.rb:47:in `public_manifest_path'
        from /usr/local/bundle/gems/webpacker-4.0.7/lib/webpacker/manifest.rb:83:in `load'
  :
(中略)
  :

あれ、rails serverが立ち上がってない...
開発環境に config/webpacker.yml が定義されていない??

Webpackerをインストール

どうやら、Rails6 ではWebpacker がデフォルトで導入されるようになったらしい。

てことは、Webpackerをインストールしてやらないとrails serverも立ち上がらないということなのかな?

ということで、Webpackerをインストールするために必要なyarnであったりNode.jsであったりをインストールするぞ!という命令をDockerfileに書いてやる。

FROM ruby:2.6.0
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
########################################################################
# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
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 && apt-get install -y yarn
# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_7.x | bash - && \
apt-get install nodejs
#######################################################################
  :
(中略)
  :

そしてWebpackerをインストール。

$ docker-compose run web bundle exec rails webpacker:install
Starting docker-begin_db_1 ... done
RAILS_ENV=development environment is not defined in config/webpacker.yml, falling back to production environment
      create  config/webpacker.yml
Copying webpack core config
      create  config/webpack
      create  config/webpack/development.js
      create  config/webpack/environment.js
      create  config/webpack/production.js
      create  config/webpack/test.js
  :
(中略)
  :
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
Webpacker successfully installed 🎉 🍰

問題なくインストール出来たのでもう一度コンテナを起動!

Ruby on Rails 2019-08-20 19-20-06.png

無事スタートラインに立つことが出来たのでした:clap:

※その後、ついでにRubyのバージョンを 2.6.3 に上げてもう一度同様の手順を試しました。

参考

Rails(Docker)でwebpackがインストールできない

28
13
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
13