3.5. Ruby on Rails를 사용하여 애플리케이션 생성
Ruby on Rails는 Ruby로 작성된 웹 프레임워크입니다. 이 가이드에서는 OpenShift Dedicated에서 Rails 4를 사용하는 방법을 설명합니다.
전체 튜토리얼을 살펴보고 OpenShift Dedicated에서 애플리케이션을 실행하는 데 필요한 모든 단계에 대한 개요를 제공합니다. 문제가 발생하면 전체 자습서를 읽어보고 다시 돌아가 문제를 해결하십시오. 이전 단계를 검토하여 모든 단계가 제대로 실행되었는지 확인하는 것도 유용할 수 있습니다.
3.5.1. 사전 요구 사항
- Ruby 및 Rails에 대한 기본 지식
- 로컬로 설치된 Ruby 2.0.0+, Rubygems, Bundler 버전
- Git에 대한 기본 지식
- OpenShift Dedicated 4의 실행 인스턴스.
-
OpenShift Dedicated 인스턴스가 실행 중이고 사용 가능한지 확인합니다. 또한 이메일 주소와 암호로 로그인할 수 있도록
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 Dedicated용 애플리케이션 구성
애플리케이션이 OpenShift Dedicated에서 실행되는 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 Dedicated에서 애플리케이션을 빌드하려면 일반적으로 소스 코드를 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 Dedicated에 애플리케이션 배포
OpenShift Dedicated에 애플리케이션을 배포할 수 있습니다.
rails-app
프로젝트를 생성하면 자동으로 새 프로젝트 네임스페이스로 전환됩니다.
OpenShift Dedicated에서 애플리케이션을 배포하려면 다음 세 단계를 수행해야 합니다.
- OpenShift Dedicated의 PostgreSQL 이미지에서 데이터베이스 서비스 생성.
- 데이터베이스 서비스와 연결된 OpenShift Dedicated의 Ruby 2.0 빌더 이미지와 Ruby on Rails 소스 코드에서 프런트 엔드 서비스를 생성합니다.
- 애플리케이션 경로를 생성합니다.
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 Dedicated로 가져오려면 애플리케이션이 상주하는 리포지토리를 지정해야 합니다.
프로세스
프런트 엔드 서비스를 생성하고 데이터베이스 서비스를 생성할 때 설정된 데이터베이스 관련 환경 변수를 지정합니다.
$ 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 Dedicated에서 소스 코드를 가져와서 빌더를 설정하고, 애플리케이션 이미지를 빌드하며, 새로 생성된 이미지를 지정된 환경 변수와 함께 배포합니다. 애플리케이션 이름은
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 Dedicated에서 실행 중인 Pod를 확인합니다.
$ oc get pods
myapp-<number>-<hash
> 로 시작하는 행이 표시되어야 하며, 이는 OpenShift Dedicated에서 실행되는 애플리케이션입니다.애플리케이션이 작동하려면 데이터베이스 마이그레이션 스크립트를 실행하여 데이터베이스를 초기화해야 합니다. 이 작업을 수행하는 방법은 다음 두 가지입니다.
실행 중인 프런트 엔드 컨테이너에서 수동으로 수행합니다.
rsh
명령을 사용하여 프런트 엔드 컨테이너에 대해 실행합니다.$ oc rsh <frontend_pod_id>
컨테이너 내부에서 마이그레이션을 실행합니다.
$ RAILS_ENV=production bundle exec rake db:migrate
Rails 애플리케이션을
development
또는test
환경에서 실행 중인 경우RAILS_ENV
환경 변수를 지정할 필요가 없습니다.
- 템플릿에 사전 배포 라이프사이클 후크를 추가하여 수행합니다.
3.5.4.3. 애플리케이션 경로 생성
서비스를 공개하여 애플리케이션 경로를 생성할 수 있습니다.
지정한 호스트 이름이 라우터의 IP 주소로 해석되는지 확인하십시오.