Rails6의 개발 환경을 Docker로 구축하려고하면 도하마한 건

개요



Docker에서의 개발 환경 구축에 익숙하지 않은 나는 연습이 테라 공식 절차를 바탕으로 Rails의 개발 환경을 구축해 보는 것에.
htps : // / cs. 도 c r. 코 m / 코 m 포세 / 라이 ls /

그때 빠진 사건과 해결 방법의 메모.

함정



최근 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 라고 인식되는 모양.
소스는 자신의 시행 착오

Dockerfile을 확인하면 바로 2.6로 했기 때문에, 아래와 같이 명시해 주는 것으로 무사docker-compose build 할 수 있었던 것이었습니다.
FROM ruby:2.6.0

rails server 일어나지 않는 문제



사건



무사 절차를 마치고 환영 페이지 를 볼 수 있는 상태가 된 하즈입니다만, 어떤 이유인가 localhost:3000 에 액세스 할 수 없다.



컨테이너는 문제없이 일어날 것입니다 ...
$ 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 버전을 2.6.3로 올려 다시 같은 절차를 시도했습니다.

참고

Rails (Docker)로 webpack을 설치할 수 없음

좋은 웹페이지 즐겨찾기