3.5. Ruby on Rails를 사용하여 애플리케이션 생성
Ruby on Rails는 Ruby로 작성된 웹 프레임워크입니다. 이 안내서에서는 OpenShift Container Platform에서 Rails 4를 사용하는 방법을 설명합니다.
전체 자습서를 살펴보고 OpenShift Container Platform에서 애플리케이션을 실행하는 데 필요한 모든 단계에 대한 개요를 알아보십시오. 문제가 발생하면 전체 자습서를 읽어보고 다시 돌아가 문제를 해결하십시오. 이전 단계를 검토하여 모든 단계가 제대로 실행되었는지 확인하는 것도 유용할 수 있습니다.
3.5.1. 사전 요구 사항
- Ruby 및 Rails에 대한 기본 지식
- 로컬로 설치된 Ruby 2.0.0+, Rubygems, Bundler 버전
- Git에 대한 기본 지식
- OpenShift Container Platform 4의 실행 중인 인스턴스
-
OpenShift Container Platform 인스턴스가 실행 중이고 사용 가능한지 확인합니다. 또한 이메일 주소와 암호로 로그인할 수 있도록
oc
CLI 클라이언트가 설치되어 있고 명령 셸에서 명령에 액세스할 수 있는지 확인합니다.
3.5.2. 데이터베이스 설정
Rails 애플리케이션은 거의 항상 데이터베이스와 함께 사용됩니다. 로컬 개발의 경우 PostgreSQL 데이터베이스를 사용합니다.
프로세스
데이터베이스를 설치합니다.
$ sudo yum install -y postgresql postgresql-server postgresql-devel
데이터베이스를 초기화합니다.
$ sudo postgresql-setup initdb
이 명령은 데이터를 저장할
/var/lib/pgsql/data
디렉토리를 생성합니다.데이터베이스를 시작합니다.
$ sudo systemctl start postgresql.service
데이터베이스가 실행 중이면
rails
사용자를 생성합니다.$ sudo -u postgres createuser -s rails
생성된 사용자에게는 암호가 없습니다.
3.5.3. 애플리케이션 작성
Rails 애플리케이션을 처음부터 시작하는 경우 Rails gem을 먼저 설치해야 합니다. 그런 다음, 애플리케이션 작성을 진행할 수 있습니다.
프로세스
Rails gem을 설치합니다.
$ gem install rails
출력 예
Successfully installed rails-4.3.0 1 gem installed
Rails gem을 설치한 후 PostgreSQL을 데이터베이스로 사용하는 새 애플리케이션을 생성합니다.
$ rails new rails-app --database=postgresql
새 애플리케이션 디렉토리로 변경합니다.
$ cd rails-app
이미 애플리케이션이 있으면
pg
(postgresql) gem이Gemfile
에 있는지 확인합니다. 없는 경우 gem을 추가하여Gemfile
을 편집합니다.gem 'pg'
종속성이 모두 포함된 새
Gemfile.lock
을 생성합니다.$ bundle install
pg
gem과 함께postgresql
데이터베이스를 사용하는 것 외에도config/database.yml
에서postgresql
어댑터를 사용하고 있는지 확인해야 합니다.config/database.yml
파일의default
섹션이 다음과 같이 표시되도록 업데이트되었는지 확인합니다.default: &default adapter: postgresql encoding: unicode pool: 5 host: localhost username: rails password: <password>
애플리케이션의 개발 및 테스트 데이터베이스를 생성합니다.
$ rake db:create
PostgreSQL 서버에
development
및test
데이터베이스가 생성됩니다.
3.5.3.1. 시작 페이지 생성
Rails 4는 더 이상 프로덕션에서 정적 public/index.html
페이지를 제공하지 않으므로 새 루트 페이지를 생성해야 합니다.
사용자 정의 시작 페이지를 생성하려면 다음 단계를 수행해야 합니다.
- 인덱스 작업을 사용하여 컨트롤러 생성
- 시작 컨트롤러 인덱스 작업에 대한 뷰 페이지 생성
- 생성된 컨트롤러 및 뷰를 통해 애플리케이션 루트 페이지를 제공할 경로 생성
Rails는 필요한 모든 단계를 수행하는 생성기를 제공합니다.
프로세스
Rails 생성기를 실행합니다.
$ rails generate controller welcome index
필요한 모든 파일이 생성됩니다.
config/routes.rb
파일의 2행을 다음과 같이 편집합니다.root 'welcome#index'
rails 서버를 실행하여 페이지가 사용 가능한지 확인합니다.
$ rails server
브라우저에서 http://localhost:3000으로 가서 페이지를 확인해야 합니다. 페이지가 표시되지 않으면 서버로 출력되는 로그를 확인하여 디버그합니다.
3.5.3.2. OpenShift Container Platform의 애플리케이션 구성
애플리케이션이 OpenShift Container Platform에서 실행되는 PostgreSQL 데이터베이스 서비스와 통신하도록 하려면 데이터베이스 서비스 생성 시 나중에 정의할 환경 변수를 사용하도록 config/database.yml
의 default
섹션을 편집해야 합니다.
프로세스
다음과 같이 사전 정의된 변수를 사용하여
config/database.yml
의default
섹션을 편집합니다.config/database
YAML 파일 샘플<% user = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? "root" : ENV["POSTGRESQL_USER"] %> <% password = ENV.key?("POSTGRESQL_ADMIN_PASSWORD") ? ENV["POSTGRESQL_ADMIN_PASSWORD"] : ENV["POSTGRESQL_PASSWORD"] %> <% db_service = ENV.fetch("DATABASE_SERVICE_NAME","").upcase %> default: &default adapter: postgresql encoding: unicode # For details on connection pooling, see rails configuration guide # http://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV["POSTGRESQL_MAX_CONNECTIONS"] || 5 %> username: <%= user %> password: <%= password %> host: <%= ENV["#{db_service}_SERVICE_HOST"] %> port: <%= ENV["#{db_service}_SERVICE_PORT"] %> database: <%= ENV["POSTGRESQL_DATABASE"] %>
3.5.3.3. Git에 애플리케이션 저장
OpenShift Container Platform에서 애플리케이션을 빌드하려면 일반적으로 소스 코드를 git 리포지터리에 저장해야 하므로 git
이 아직 없는 경우 설치해야 합니다.
사전 요구 사항
- git을 설치해야 합니다.
프로세스
ls -1
명령을 실행하여 Rails 애플리케이션 디렉토리에 있는지 확인합니다. 명령 출력은 다음과 같아야 합니다.$ ls -1
출력 예
app bin config config.ru db Gemfile Gemfile.lock lib log public Rakefile README.rdoc test tmp vendor
Rails 앱 디렉토리에서 다음 명령을 실행하여 코드를 초기화하고 git으로 커밋합니다.
$ git init
$ git add .
$ git commit -m "initial commit"
애플리케이션이 커밋된 후에는 원격 리포지터리로 푸시해야 합니다. GitHub 계정으로 새 리포지터리를 생성합니다.
git
리포지터리를 가리키는 remote를 설정합니다.$ git remote add origin git@github.com:<namespace/repository-name>.git
애플리케이션을 원격 git 리포지터리로 푸시합니다.
$ git push
3.5.4. OpenShift Container Platform에 애플리케이션 배포
OpenShift Container Platform에 애플리케이션을 배포할 수 있습니다.
rails-app
프로젝트를 생성하면 자동으로 새 프로젝트 네임스페이스로 전환됩니다.
OpenShift Container Platform에서 애플리케이션을 배포하려면 다음 세 단계를 수행해야 합니다.
- OpenShift Container Platform의 PostgreSQL 이미지에서 데이터베이스 서비스를 생성합니다.
- 데이터베이스 서비스와 연결된 OpenShift Container Platform의 Ruby 2.0 빌더 이미지 및 Ruby on Rails 소스 코드에서 프런트 엔드 서비스를 생성합니다.
- 애플리케이션 경로를 생성합니다.
프로세스
Ruby on Rails 애플리케이션을 배포하려면 애플리케이션을 위한 새 프로젝트를 생성합니다.
$ oc new-project rails-app --description="My Rails application" --display-name="Rails Application"
3.5.4.1. 데이터베이스 서비스 생성
Rails 애플리케이션에는 실행 중인 데이터베이스 서비스가 필요합니다. 이 서비스의 경우 PostgreSQL 데이터베이스 이미지를 사용합니다.
데이터베이스 서비스를 생성하려면 oc new-app
명령을 사용합니다. 데이터베이스 컨테이너 내에서 사용할 몇 가지 필요한 환경 변수를 이 명령으로 전달해야 합니다. 이러한 환경 변수는 사용자 이름, 암호 및 데이터베이스 이름을 설정하는 데 필요합니다. 이러한 환경 변수 값은 원하는 대로 변경할 수 있습니다. 변수는 다음과 같습니다.
- POSTGRESQL_DATABASE
- POSTGRESQL_USER
- POSTGRESQL_PASSWORD
이러한 변수를 설정하면 다음과 같은 결과를 얻을 수 있습니다.
- 지정된 이름의 데이터베이스가 있습니다.
- 지정된 이름의 사용자가 있습니다.
- 사용자가 지정된 암호를 사용하여 지정된 데이터베이스에 액세스할 수 있습니다.
프로세스
데이터베이스 서비스를 생성합니다.
$ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password
데이터베이스 관리자의 암호도 설정하려면 다음 행을 이전 명령에 추가합니다.
-e POSTGRESQL_ADMIN_PASSWORD=admin_pw
진행 상황을 확인합니다.
$ oc get pods --watch
3.5.4.2. 프런트 엔드 서비스 생성
애플리케이션을 OpenShift Container Platform으로 가져오려면 애플리케이션이 상주하는 리포지터리를 지정해야 합니다.
프로세스
프런트 엔드 서비스를 생성하고 데이터베이스 서비스를 생성할 때 설정된 데이터베이스 관련 환경 변수를 지정합니다.
$ oc new-app path/to/source/code --name=rails-app -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password -e POSTGRESQL_DATABASE=db_name -e DATABASE_SERVICE_NAME=postgresql
OpenShift Container Platform은 이 명령을 사용하여 소스 코드를 가져와서 빌더를 설정하고, 애플리케이션 이미지를 빌드하며, 새로 생성된 이미지를 지정된 환경 변수와 함께 배포합니다. 애플리케이션 이름은
rails-app
으로 지정됩니다.rails-app
배포 구성의 JSON 문서를 보고 환경 변수가 추가되었는지 확인합니다.$ oc get dc rails-app -o json
다음 섹션이 표시되어야 합니다.
출력 예
env": [ { "name": "POSTGRESQL_USER", "value": "username" }, { "name": "POSTGRESQL_PASSWORD", "value": "password" }, { "name": "POSTGRESQL_DATABASE", "value": "db_name" }, { "name": "DATABASE_SERVICE_NAME", "value": "postgresql" } ],
빌드 프로세스를 확인합니다.
$ oc logs -f build/rails-app-1
빌드가 완료되면 OpenShift Container Platform에서 실행 중인 Pod를 확인합니다.
$ oc get pods
myapp-<number>-<hash>
로 시작되는 행이 표시되어야 합니다. OpenShift Container Platform에서 실행 중인 애플리케이션을 나타냅니다.애플리케이션이 작동하려면 데이터베이스 마이그레이션 스크립트를 실행하여 데이터베이스를 초기화해야 합니다. 이 작업을 수행하는 방법은 다음 두 가지입니다.
실행 중인 프런트 엔드 컨테이너에서 수동으로 수행합니다.
rsh
명령을 사용하여 프런트 엔드 컨테이너에 대해 실행합니다.$ oc rsh <frontend_pod_id>
컨테이너 내부에서 마이그레이션을 실행합니다.
$ RAILS_ENV=production bundle exec rake db:migrate
Rails 애플리케이션을
development
또는test
환경에서 실행 중인 경우RAILS_ENV
환경 변수를 지정할 필요가 없습니다.
- 템플릿에 사전 배포 라이프사이클 후크를 추가하여 수행합니다.
3.5.4.3. 애플리케이션 경로 생성
서비스를 공개하여 애플리케이션 경로를 생성할 수 있습니다.
프로세스
www.example.com
과 같이 외부에서 접근할 수 있는 호스트 이름을 지정하여 서비스를 공개하려면 OpenShift Container Platform 경로를 사용합니다. 이 경우 다음을 입력하여 프런트 엔드 서비스를 공개해야 합니다.$ oc expose service rails-app --hostname=www.example.com
지정한 호스트 이름이 라우터의 IP 주소로 해석되는지 확인하십시오.