3.5. Ruby on Rails를 사용하여 애플리케이션 생성


Ruby on Rails는 Ruby로 작성된 웹 프레임워크입니다. 이 가이드에서는 AWS의 Red Hat OpenShift Service에서 Rails 4를 사용하는 방법을 설명합니다.

주의

전체 튜토리얼을 살펴보고 AWS의 Red Hat OpenShift Service에서 애플리케이션을 실행하는 데 필요한 모든 단계에 대한 개요를 제공합니다. 문제가 발생하면 전체 자습서를 읽어보고 다시 돌아가 문제를 해결하십시오. 이전 단계를 검토하여 모든 단계가 제대로 실행되었는지 확인하는 것도 유용할 수 있습니다.

3.5.1. 사전 요구 사항

  • Ruby 및 Rails에 대한 기본 지식
  • 로컬로 설치된 Ruby 2.0.0+, Rubygems, Bundler 버전
  • Git에 대한 기본 지식
  • AWS 4에서 Red Hat OpenShift Service의 실행 중인 인스턴스입니다.
  • AWS의 Red Hat OpenShift Service 인스턴스가 실행 중이고 사용 가능한지 확인합니다. 또한 이메일 주소와 암호로 로그인할 수 있도록 oc CLI 클라이언트가 설치되어 있고 명령 셸에서 명령에 액세스할 수 있는지 확인합니다.

3.5.2. 데이터베이스 설정

Rails 애플리케이션은 거의 항상 데이터베이스와 함께 사용됩니다. 로컬 개발의 경우 PostgreSQL 데이터베이스를 사용합니다.

프로세스

  1. 데이터베이스를 설치합니다.

    $ sudo yum install -y postgresql postgresql-server postgresql-devel
  2. 데이터베이스를 초기화합니다.

    $ sudo postgresql-setup initdb

    이 명령은 데이터를 저장할 /var/lib/pgsql/data 디렉토리를 생성합니다.

  3. 데이터베이스를 시작합니다.

    $ sudo systemctl start postgresql.service
  4. 데이터베이스가 실행 중이면 rails 사용자를 생성합니다.

    $ sudo -u postgres createuser -s rails

    생성된 사용자에게는 암호가 없습니다.

3.5.3. 애플리케이션 작성

Rails 애플리케이션을 처음부터 시작하는 경우 Rails gem을 먼저 설치해야 합니다. 그런 다음, 애플리케이션 작성을 진행할 수 있습니다.

프로세스

  1. Rails gem을 설치합니다.

    $ gem install rails

    출력 예

    Successfully installed rails-4.3.0
    1 gem installed

  2. Rails gem을 설치한 후 PostgreSQL을 데이터베이스로 사용하는 새 애플리케이션을 생성합니다.

    $ rails new rails-app --database=postgresql
  3. 새 애플리케이션 디렉토리로 변경합니다.

    $ cd rails-app
  4. 이미 애플리케이션이 있으면 pg(postgresql) gem이 Gemfile에 있는지 확인합니다. 없는 경우 gem을 추가하여 Gemfile을 편집합니다.

    gem 'pg'
  5. 종속성이 모두 포함된 새 Gemfile.lock을 생성합니다.

    $ bundle install
  6. 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>
  7. 애플리케이션의 개발 및 테스트 데이터베이스를 생성합니다.

    $ rake db:create

    PostgreSQL 서버에 developmenttest 데이터베이스가 생성됩니다.

3.5.3.1. 시작 페이지 생성

Rails 4는 더 이상 프로덕션에서 정적 public/index.html 페이지를 제공하지 않으므로 새 루트 페이지를 생성해야 합니다.

사용자 정의 시작 페이지를 생성하려면 다음 단계를 수행해야 합니다.

  • 인덱스 작업을 사용하여 컨트롤러 생성
  • 시작 컨트롤러 인덱스 작업에 대한 뷰 페이지 생성
  • 생성된 컨트롤러 및 뷰를 통해 애플리케이션 루트 페이지를 제공할 경로 생성

Rails는 필요한 모든 단계를 수행하는 생성기를 제공합니다.

프로세스

  1. Rails 생성기를 실행합니다.

    $ rails generate controller welcome index

    필요한 모든 파일이 생성됩니다.

  2. config/routes.rb 파일의 2행을 다음과 같이 편집합니다.

    root 'welcome#index'
  3. rails 서버를 실행하여 페이지가 사용 가능한지 확인합니다.

    $ rails server

    브라우저에서 http://localhost:3000으로 가서 페이지를 확인해야 합니다. 페이지가 표시되지 않으면 서버로 출력되는 로그를 확인하여 디버그합니다.

3.5.3.2. AWS에서 Red Hat OpenShift Service에 대한 애플리케이션 구성

애플리케이션이 AWS의 Red Hat OpenShift Service에서 실행되는 PostgreSQL 데이터베이스 서비스와 통신하도록 하려면 데이터베이스 서비스 생성 시 나중에 정의해야 하는 환경 변수를 사용하도록 config/database.ymldefault 섹션을 편집해야 합니다.

프로세스

  • 다음과 같이 사전 정의된 변수를 사용하여 config/database.ymldefault 섹션을 편집합니다.

    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에 애플리케이션 저장

AWS의 Red Hat OpenShift Service에 애플리케이션을 빌드하려면 일반적으로 소스 코드를 git 리포지토리에 저장해야 하므로 git 이 아직 없는 경우 설치해야 합니다.

사전 요구 사항

  • git을 설치해야 합니다.

프로세스

  1. ls -1 명령을 실행하여 Rails 애플리케이션 디렉토리에 있는지 확인합니다. 명령 출력은 다음과 같아야 합니다.

    $ ls -1

    출력 예

    app
    bin
    config
    config.ru
    db
    Gemfile
    Gemfile.lock
    lib
    log
    public
    Rakefile
    README.rdoc
    test
    tmp
    vendor

  2. Rails 앱 디렉토리에서 다음 명령을 실행하여 코드를 초기화하고 git으로 커밋합니다.

    $ git init
    $ git add .
    $ git commit -m "initial commit"

    애플리케이션이 커밋된 후에는 원격 리포지터리로 푸시해야 합니다. GitHub 계정으로 새 리포지터리를 생성합니다.

  3. git 리포지터리를 가리키는 remote를 설정합니다.

    $ git remote add origin git@github.com:<namespace/repository-name>.git
  4. 애플리케이션을 원격 git 리포지터리로 푸시합니다.

    $ git push

3.5.4. AWS의 Red Hat OpenShift Service에 애플리케이션 배포

AWS의 Red Hat OpenShift Service에 애플리케이션을 배포할 수 있습니다.

rails-app 프로젝트를 생성하면 자동으로 새 프로젝트 네임스페이스로 전환됩니다.

AWS의 Red Hat OpenShift Service에서 애플리케이션을 배포하려면 다음 세 단계를 수행해야 합니다.

  • AWS의 PostgreSQL 이미지의 Red Hat OpenShift Service에서 데이터베이스 서비스 생성.
  • AWS의 Ruby 2.0 빌더 이미지 및 데이터베이스 서비스와 연결된 Ruby on Rails 소스 코드에서 Red Hat OpenShift Service에서 프런트 엔드 서비스를 생성합니다.
  • 애플리케이션 경로를 생성합니다.

3.5.4.1. 데이터베이스 서비스 생성

프로세스

Rails 애플리케이션에는 실행 중인 데이터베이스 서비스가 필요합니다. 이 서비스의 경우 PostgreSQL 데이터베이스 이미지를 사용합니다.

데이터베이스 서비스를 생성하려면 oc new-app 명령을 사용합니다. 데이터베이스 컨테이너 내에서 사용할 몇 가지 필요한 환경 변수를 이 명령으로 전달해야 합니다. 이러한 환경 변수는 사용자 이름, 암호 및 데이터베이스 이름을 설정하는 데 필요합니다. 이러한 환경 변수 값은 원하는 대로 변경할 수 있습니다. 변수는 다음과 같습니다.

  • POSTGRESQL_DATABASE
  • POSTGRESQL_USER
  • POSTGRESQL_PASSWORD

이러한 변수를 설정하면 다음과 같은 결과를 얻을 수 있습니다.

  • 지정된 이름의 데이터베이스가 있습니다.
  • 지정된 이름의 사용자가 있습니다.
  • 사용자가 지정된 암호를 사용하여 지정된 데이터베이스에 액세스할 수 있습니다.

프로세스

  1. 데이터베이스 서비스를 생성합니다.

    $ oc new-app postgresql -e POSTGRESQL_DATABASE=db_name -e POSTGRESQL_USER=username -e POSTGRESQL_PASSWORD=password

    데이터베이스 관리자의 암호도 설정하려면 다음 행을 이전 명령에 추가합니다.

    -e POSTGRESQL_ADMIN_PASSWORD=admin_pw
  2. 진행 상황을 확인합니다.

    $ oc get pods --watch

3.5.4.2. 프런트 엔드 서비스 생성

애플리케이션을 AWS의 Red Hat OpenShift Service로 가져오려면 애플리케이션이 상주하는 리포지토리를 지정해야 합니다.

프로세스

  1. 프런트 엔드 서비스를 생성하고 데이터베이스 서비스를 생성할 때 설정된 데이터베이스 관련 환경 변수를 지정합니다.

    $ 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

    이 명령을 사용하면 AWS의 Red Hat OpenShift Service에서 소스 코드를 가져오고, 빌더를 설정하고, 애플리케이션 이미지를 빌드하며, 새로 생성된 이미지를 지정된 환경 변수와 함께 배포합니다. 애플리케이션 이름은 rails-app으로 지정됩니다.

  2. 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"
        }
    
    ],

  3. 빌드 프로세스를 확인합니다.

    $ oc logs -f build/rails-app-1
  4. 빌드가 완료되면 AWS의 Red Hat OpenShift Service에서 실행 중인 Pod를 확인합니다.

    $ oc get pods

    myapp-<number>-<hash >로 시작하는 행이 표시되어야 합니다. 이는 AWS의 Red Hat OpenShift Service에서 실행되는 애플리케이션입니다.

  5. 애플리케이션이 작동하려면 데이터베이스 마이그레이션 스크립트를 실행하여 데이터베이스를 초기화해야 합니다. 이 작업을 수행하는 방법은 다음 두 가지입니다.

    • 실행 중인 프런트 엔드 컨테이너에서 수동으로 수행합니다.

      • rsh 명령을 사용하여 프런트 엔드 컨테이너에 대해 실행합니다.

        $ oc rsh <frontend_pod_id>
      • 컨테이너 내부에서 마이그레이션을 실행합니다.

        $ RAILS_ENV=production bundle exec rake db:migrate

        Rails 애플리케이션을 development 또는 test 환경에서 실행 중인 경우 RAILS_ENV 환경 변수를 지정할 필요가 없습니다.

    • 템플릿에 사전 배포 라이프사이클 후크를 추가하여 수행합니다.

3.5.4.3. 애플리케이션 경로 생성

서비스를 공개하여 애플리케이션 경로를 생성할 수 있습니다.

주의

지정한 호스트 이름이 라우터의 IP 주소로 해석되는지 확인하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.