Docker를 통한 Hanami(구명 Lootus) 개발 환경 구축
개시하다
루비의 프레임 하면 라일스 느낌이 나지만 다른 프레임도 쓰고 싶고, 닥터커 환경 구축과 관련된 기사는 기본적으로 라일스를 전제로 한 것이기 때문에 이번에는 하나미로 환경을 구축하려 했다.
Dockerfile,docker-compose.나는 yml의 내용과 업무는 Rails 때와 별 차이가 없다고 생각한다.
하나미의 특징
$ tree apps
apps
└── web
├── application.rb
├── assets
│ ├── favicon.ico
│ ├── images
│ ├── javascripts
│ └── stylesheets
├── config
│ └── routes.rb
├── controllers
├── templates
│ └── application.html.erb
└── views
└── application_layout.rb
하나의 응용 프로그램 안에 다음과 같은 구조가 있다컨트롤러는 디렉터리 이름으로 동작에 따라 파일로 나뉜다.
├── application.rb
├── assets
│ ├── favicon.ico
│ ├── images
│ ├── javascripts
│ └── stylesheets
├── config
│ └── routes.rb
├── controllers
│ ├── books
│ │ └── index.rb
│ └── home
│ └── index.rb
├── templates
│ ├── application.html.erb
│ ├── books
│ │ └── index.html.erb
│ └── home
│ └── index.html.erb
└── views
├── application_layout.rb
├── books
│ └── index.rb
└── home
└── index.rb
컨디션
작성된 개발 환경
차리다
설치Docker for Mac
환경 구조
프로젝트 디렉터리에 다음 파일을 만듭니다.
$ mkdir app
$ cd app
Gemfilesource 'https://rubygems.org'
gem 'hanami', '~> 0.9'
Dockerfile
APP_HOME에서 지정한 디렉터리 이름은
hanami new .
프로젝트를 만들 때의 프로젝트 이름입니다.Dockerfile
FROM ruby:2.3.1
ENV LANG C.UTF-8
RUN gem install bundler
ENV APP_HOME /app
RUN mkdir $APP_HOME
WORKDIR $APP_HOME
ADD Gemfile* $APP_HOME/
RUN echo 'gem: --no-document' > ~/.gemrc \
&& bundle install
ADD . $APP_HOME
docker-compose.yml
하나미로 프로젝트를 하면 개발자와 테스트(자동 테스트용)로 DB를 두 개 만든다.env를 만들었기 때문에 그것에 따라 두 개의 DB 용기를 만들었고 개발자만 영원히 지속됩니다.
컨테이너 1개에 DB 2개를 만드는 게 좋을 것 같은데 어떻게 해야 할지 모르겠어요...
docker-compose.yml
version: '2'
services:
web:
build: .
command: 'bundle exec hanami server --host 0.0.0.0 -p 2300'
ports:
- 2300:2300
volumes:
#DockerfileのAPP_NAMEに指定したもの
- .:/app
links:
- db
- db2
environment:
- DATABASE_URL=postgres://dev:dev@db:5432/dev
db:
image: 'postgres:9.6'
volumes:
- ./db/postgres_data:/var/lib/postgresql/data
# PG CommanderなどのクライアントからDB接続するためのポート設定
ports:
- 5432:5432
environment:
- POSTGRES_USER=dev
- POSTGRES_PASSWORD=dev
db2:
image: 'postgres:9.6'
environment:
- POSTGRES_USER=test
- POSTGRES_PASSWORD=test
프로젝트 작성
$ docker-compose run web bundle exec hanami new . --database=postgresql
Gemfile이 덮어쓰여지지 않느냐는 질문에 Y로 덮어씁니다.프로젝트 작성 후 상태는 다음과 같습니다.
$ tree -L 1
.
├── Dockerfile
├── Gemfile
├── Gemfile.lock
├── Rakefile
├── apps
├── config
├── config.ru
├── db
├── docker-compose.yml
├── lib
├── public
└── spec
DB 설정 변경
.env.development
와 .env.test
에 사용된 DB의 설정이 docker-compose에 기록되었습니다.yml 설정을 덮어쓰기 때문에 삭제합니다..env.development
# Define ENV variables for development environment
DATABASE_URL="postgres://localhost/app_development" # この行を削除
SERVE_STATIC_ASSETS="true"
WEB_SESSIONS_SECRET="xxxx"
용기 가동, 화면 표시 확인
$ docker-compose build web
$ docker-compose up web
localhost: 2300에 로그인해서 기본 화면 표시를 확인하면 됩니다.마이그레이션 및 테스트 실행 등
라크 작업과 하나미의 명령 수행도 프로젝트 제작과 마찬가지로 docker-compose run을 이용한다.
$ docker-compose run web bundle exec hanami generate migration create_books
$ docker-compose run web bundle exec hanami db migrate
DB 컨텐츠 확인
Rails의dbconcel처럼 Hanami도 명령선을 통해 DB 연결을 할 수 있지만 웹 용기에 PostgreSQL이 설치되어 있지 않아 잘못 연결할 수 없습니다.
$ docker-compose run web bundle exec hanami db console
bundler: failed to load command: hanami (/usr/local/bundle/bin/hanami)
Errno::ENOENT: No such file or directory - psql
docker-compose로 DB의 용기를 분리해서 관리하고 싶지 않지만 웹에 넣고 싶지 않아서 클라이언트로 연결하기로 했습니다.여기서 사용하는 것은 PG Commander입니다.
Port, User, Password, Database는 docker-compose입니다.yml 설정에 따라 입력합니다.
이상은 기본 홈페이지 디스플레이와 DB의 준비 작업입니다. 개발 작업에 들어갈 수 있을 것 같습니다.
참고 자료
Hanami 공식 문서
Hanami(레거시: Lotus) - Microservices용 루비 프레임워크
Reference
이 문제에 관하여(Docker를 통한 Hanami(구명 Lootus) 개발 환경 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shibabuki_yuta/items/0239aaa21d3b92b8e06c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)