Docker&Rails6 환경을 구축하십시오.

12458 단어 Docker

본 보도에 관하여 (사절)


이 글은 지루한 프로그래밍 초보자들이 프로그래밍 기술을 배우고 접하기 위해 갔던 비망록으로 쓴 것이다.양해해 주십시오.
나는 기꺼이 당신의 지적을 받아들일 것입니다🙇‍♂️

목표


우리의 목표는 먼저 필요한 파일을 준비한 다음 Rails 응용 프로그램을 시작하는 것입니다.

참고 자료


이번 작업은 아래의 보도를 참고하였다.많이 배웠어요.정말 감사합니다.
Quickstart: Compose and Rails | Docker Documentation
https://qiita.com/kodai_0122/items/795438d738386c2c1966#2-2-bundle-install
https://qiita.com/at-946/items/2fb75cec5355fad4050d

환경 생성 단계


1. 준비


1-1 폴더 만들기
우선, 작업을 위한 폴더를 임의로 만듭니다.
만든 폴더로 이동합니다.
$ mkdir myapp
$ cd my app
1-2 Dockerfile 만들기
폴더에 Dockerfile을 만듭니다.
공식 홈페이지 내: 참고빠른 시작 버전만 변경하여 제작합니다.
Dockerfile
FROM ruby:2.6.5
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
1-3 Gemfile 만들기
설치할 Rails 버전을 6으로 지정합니다.Gemfile.lock도 만들어야 합니다.안에 아무것도 안 써도 돼요.
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6'
$ touch Gemfile.lock
1-4entrypoint.sh 만들기
컨테이너가 시작되면 Rails의 서버입니다.매번 pid를 삭제하는 것 같습니다.(영어를 잘 못해서 쓴 게 다르면 미안해요) 이 파일을 자주 남겨두고 컨테이너에 있던 걸 지우느라 힘들었던 기억이 있어요.
entrypoint.sh
#!/bin/bash
set -e

# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid

# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
1-5docker-compose.yml 만들기
docker-compose.yml은 마법 같은 파일입니다.필요한 응용 프로그램 (웹,db 응용 프로그램) 을 구성하는 서비스와 인상을 종합하여 실행합니다.(영어를 잘 못하는 n이 스스로 이 파일의 느낌으로 말하는 부분도 있는데 오해를 불러일으키는 표현이 있으면 죄송합니다)
docker-compose.yml
version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
여기서 DB(PostgreSQL), 웹 두 개를 수행합니다.
여기까지 서류 준비가 끝났다.

2. 프로젝트 구축


2-1rails newdocker-compose run 명령을 사용합니다.
$ docker-compose run web rails new . --force --no-deps --database=postgresql --skip-bundle
이로써 myapp 폴더에는 익숙한 폴더 구성이 생겼다.
종착역의 마지막에 다음과 같이 메시지를 보냅니다.
Could not find gem 'pg (>= 0.18, < 2.0)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
rails new 이런 정보입니다.
2-2bundle install
Dockerfile에 기술되어 있기 때문에bundle install 이미지를 구축할 때 마음대로 할 수 있습니다.
$ docker-compose build
2-3 DB 접속 설정
Rails의 confg/databaseyml을 (으)로 변경합니다.
config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test
.
.
.
2-4 Docker 컨테이너 시작
$ docker-compose up
그리고 자꾸 잘못이 많다고 생각해요.
db_1   | Error: Database is uninitialized and superuser password is not specified.
.
.
.
web_1  | /usr/local/bundle/gems/webpacker-4.2.2/lib/webpacker/configuration.rb:95: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)
위의 오류는 PostgreSQL 암호가 필요하기 때문에 발생한 메시지입니다.bundle install에서 추서하다.
config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password  # <= この部分
  pool: 5

또 다른 오류는 기본적으로 Webpacker가 Rails6에서 왔기 때문에 Webpacker를 설치해야 한다는 것입니다.
그러면 이 Webpacker 설치에는 yarn 또는 Node가 필요합니다.js를 설치해야 한다고 들었어요.
이에 대응하려면 Dockerfile을 편집해야 합니다.
Dockerfile
FROM ruby:2.6.5
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
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
RUN 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
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
그럼 Webpacker를 설치해 보세요.
$ docker-compose stop
$ docker-compose down
$ docker-compose run web bundle exec rails webpacker:install
.
.
Webpacker successfully installed 🎉 🍰
Webpacker가 설치되었습니다.
용기를 다시 시작하다.
$ docker-compose up
2-5 데이터베이스 생성
데이터베이스를 만듭니다.이게 완성이야.
$ docker-compose run web rails db:create
Starting myapp_db_1 ... done
Created database 'myapp_development'
Created database 'myapp_test'

2-6 액세스 시도
브라우저에서 액세스를 시도합니다http://localhost:3000/.모두가 익숙한 화면이 나를 맞이하여 순조롭게 성공했다!

Yay!

총결산


Docker에서 Rails6 환경을 생성하려고 시도했습니다.
실제로 작업할 때 작업 폴더의 이름은 Dockerfile에서 지정한 폴더 이름과 다르고 다른 것도 까다롭다.다른 분들에게 도움이 됐으면 좋겠어요.

좋은 웹페이지 즐겨찾기