window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() 활성 레코드로 처음부터 간단한 루비 애플리케이션 만들기 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2021-07-07
소프트웨어 개발

활성 레코드로 처음부터 간단한 루비 애플리케이션 만들기

The Codest

데미안 와트로바

Software Engineer

MVC는 애플리케이션의 책임을 분담하여 더 쉽게 이동할 수 있도록 하는 디자인 패턴입니다. Rails는 관례적으로 이 디자인 패턴을 따릅니다.

저는 다음과 같이 작업하는 것을 좋아합니다. 레일 작동하는 애플리케이션을 쉽고 빠르게 만들어 전 세계 또는 친구들에게 보여줄 수 있기 때문입니다. 그러나 다음과 같이 큰 프레임워크가 필요하지 않은 애플리케이션 유형도 있습니다. 레일 및 모든 기능.

전체 MVC 패턴 중 M(모델)만 필요한 애플리케이션이 있을 수 있습니다. 모델-컨트롤러. 를 시작할 가치가 있습니까? 프로젝트 in 레일 V-C(뷰-컨트롤러) 부분이 필요하지 않다는 것을 알고 있다면?

다음 사항을 알아두면 좋습니다. 활성 레코드 MVC를 담당하는 액티브 모델, 액션 팩 및 액션 뷰는 외부에서 독립적으로 사용할 수 있습니다. 레일. 이를 통해 간단한 루비 애플리케이션 데이터베이스에 연결하여 불필요한 코드 및 라이브러리를 패키지로 가져올 수 있도록 rails new 명령을 실행합니다.

이를 달성하는 방법을 단계별로 설명했으며 전체 코드는 GitHub에서 찾을 수 있습니다. 링크는 이 글 하단에 있습니다. 

구조

프로젝트를 시작하기 위해 필요한 것은 많지 않습니다. 먼저 보석 파일 에서 애플리케이션에 필요한 보석을 추가하는 데 필요한 버전과 함께 Ruby 를 사용할 것입니다.

 고양이 보석 파일

# frozen_string_literal: true

소스 'https://rubygems.org'

루비 '2.7.2'

선택 사항 README.md 파일은 우리 애플리케이션의 작동 방식과 향후 프로젝트를 함께 개발할 다른 개발자를 위해 애플리케이션을 계속 개발하는 방법을 설명하는 것입니다.

cat README.md

# 애플리케이션

할 일: 이 텍스트와 위의 텍스트를 삭제하고 앱을 설명합니다.

앱 디렉토리에 application.rb 파일은 애플리케이션에 추가할 라이브러리와 파일을 구성하고 로드하는 역할을 합니다. 실행하는 것을 잊지 마세요. 번들 설치 를 생성하여 Gemfile.lock. 이 단계에서 애플리케이션의 구조는 다음과 같아야 합니다:

트리
 .
 ├── Gemfile
 ├── Gemfile.lock
 ├── README.md
 └── app
     └── application.rb

데이터베이스

이러한 구조가 준비되면 어떤 데이터베이스 엔진을 선택하고 구성할지 고려할 수 있습니다. 이 글에서는 제가 가장 많은 경험을 가지고 있는 PostgresQL을 선택했습니다. MySQL이나 SQlite3 또는 다른 엔진도 사용할 수 있습니다. 활성 레코드. 기술을 선택할 때는 애플리케이션의 목적, 사용 용도 및 목적에 따라 안내를 받는 것이 좋습니다. 

빠르고 간단한 데이터베이스 구성을 위해 저는 docker와 docker-compose를 사용했습니다. 이러한 도구의 구성과 장단점에 대해 자세히 설명하고 싶지는 않지만, 도커를 사용해 본 적이 없다면 다음 공식 문서를 참조하시기 바랍니다. Docker 그리고 도커 컴포즈 에서 자세한 내용을 확인하세요.

# docker-compose.yml

버전: '3.7'
서비스
  postgresql:
    이미지: postgres:12.0-alpine
    포트
- 5432:5432
    환경:
- PGDATA=/postgresql
- POSTGRESPASSWORD=postgres
- POSTGRESUSER=postgres
    볼륨
- DB-볼륨:/postgresql
volumes:
  db-volume:

또한 보석 파일

gem 'pg'

그리고 우리의 application.rb 파일

# 앱/응용 프로그램.rb

require 'pg'

모듈 애플리케이션

  클래스 Error < StandardError; 끝

# 코드가 여기로 이동합니다...

end

독립형 마이그레이션, 레이크

애플리케이션 구성의 다음 단계는 애플리케이션에 스탠드얼론_마이그레이션 그리고 레이크 gems를 추가하면 Rails에서와 마찬가지로 마이그레이션을 관리하고 rake db: 명령에 액세스할 수 있습니다. 

  1. 업데이트 보석 파일 필요한 보석으로 번들 설치
비레일 및 비루비 애플리케이션에 사용되는 # 보석

gem '스탠드얼론_마이그레이션'

# standalone_migrations는 Rails에서와 같이 마이그레이션을 생성하고 실행할 수 있도록 rake가 필요합니다.

gem 'rake'

환경 변수를 로드하는 데 # 젬 필요

gem 'dotenv'
  1. 추가해 보겠습니다. 레이크파일 를 루트 디렉토리에 있는 프로젝트에 추가하여 dotenv 그리고 스탠드얼론_마이그레이션 이전에 추가한 
# frozen_string_literal: true

'dotenv' 필요

Dotenv.load

require 'standalone_migrations'

스탠드얼론 마이그레이션::태스크.로드_태스크

와 함께 레이크파일 이 방법으로 구성하면 레이크 를 사용하여 작동하고 있습니다. rake -T 명령을 실행하면 애플리케이션에서 사용 가능한 명령 목록을 반환합니다.

루비 앱
  1. 이전 레이크 DB:생성를 사용하더라도 프로젝트에 Postgres 인스턴스에 연결하기 위한 구성 파일이 있어야 합니다. 이를 위해서는 db 디렉터리와 함께 config.yml 파일을 생성합니다:
# db/config.yml

기본값: &기본값

  어댑터: postgresql

  인코딩: 유니코드

  pool: 

  데이터베이스: 

  사용자 이름 

  password: 

  host: 

  port: 

개발:

  <<: *default

테스트:

  <<: *기본값

스테이징:

  <<: *기본값

프로덕션:

  <<: *기본값

보시다시피, 환경 변수를 사용하여 저장소에 있어서는 안 되는 민감한 데이터를 보관할 Postgres에 대한 연결을 구성했습니다. 이를 위해 이전에 추가한 보석 도트엔브이에도 추가되었으며, 이는 레이크파일 와 함께 스탠드얼론_마이그레이션. Git을 사용하여 애플리케이션의 버전 관리를 관리하는 경우, 애플리케이션의 버전 관리를 관리하기 위해 .gitignore 파일에서 추적 가능성을 비활성화합니다. .env 파일을 프로젝트에서 삭제합니다.

 # .gitignore
.env*
!.env.example

를 추가하고.env 파일에 올바르게 구성된 환경이 포함된

# .env

DATABASE_NAME="개발"

DATABASE_USER="postgres"

DATABASE_PASSWORD="postgres"

DATABASE_HOST="localhost"

DATABASE_PORT="5432"
  1. 이 단계에서는 다음을 실행할 수 있어야 합니다. 레이크 DB:생성 명령으로 데이터베이스를 생성합니다.

    루비 웹 애플리케이션

  2. 다음을 통해 새 마이그레이션을 추가해 보겠습니다. rake db:new_migration name=를 생성하여 게시물 테이블이 있는 :title 열

    Rails 웹 애플리케이션

# frozen_string_literal: true

CreatePosts < ActiveRecord::Migration[6.0] 클래스

  def change

    create_table :posts do |t|

      t.string :title

    end

  end

끝
Ruby on Rails 웹 애플리케이션

다음과 같이 db/migrate 디렉토리가 자동으로 추가되고 schema.rb 마이그레이션이 성공적으로 완료된 후 생성되었습니다. 현재 프로젝트 구조는 다음과 같습니다:

 tree
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── 레이크파일
├── .gitignore
├── .env.example
├── app
│ └── application.rb
├── db
│ ├── config.yml
│ ├── 마이그레이션
│ │ └── 20210504135128_create_posts.rb
│ └── schema.rb
└── docker-compose.yml

활성 레코드

마지막으로 애플리케이션을 만드는 또 다른 단계는 다음을 추가하는 것입니다. 액티버코드 및 그 구성. 이를 위해서는 젬 파일에 3개의 젬을 더 업데이트해야 합니다:

gem '액티버레코드'
gem 'erb'
gem 'yaml'

추가하는 이유 erb 그리고 ymal 에 대한 설명은 아래 댓글에서 확인할 수 있습니다. 전체 active_record 구성은 앱/애플리케이션.rb 파일을 만듭니다.

여기서 어떤 일이 일어나는지 하나씩 살펴보겠습니다:

# frozen_string_literal: true

# 다른 환경에서 애플리케이션을 실행할 수 있도록 하려는 경우,
# 테스트 또는 프로덕션과 같은 다른 환경에서 애플리케이션을 실행하려면 처음에 환경 변수에서 가져온
#를 설정하는 것이 좋으며, 이는 환경 변수에서 가져온 것입니다.
# 또는 기본적으로 `개발`로 설정하는 것이 좋습니다.

ENV['ENVIRONMENT'] ||= 'development'

# 추가된 젬을 사용하려면 Kernel#require 메서드를 사용하여 로드해야 합니다,
#는 매개변수로 전달된 파일 또는 라이브러리를 로드합니다.

require 'pg'
require 'active_record'
require 'dotenv'
require 'yaml'
require 'erb'

# 기본적으로 환경 변수를 로드하기 위한 Dotenv.load는 '.
#를 '.env' 파일에 전달하므로 다른 환경을 사용하려면
#는 이를 아래 방법으로 확장하여 먼저 세트 개발을 위해 다음과 같이 합니다.
# 환경에서는 '.env.development.local'로 끝나는 파일을 찾습니다,
#, '.env.development', 마지막으로 '.env'로 끝나는 파일을 찾습니다.

Dotenv.load(".env.#{ENV.fetch('환경')}.local", ".env.#{ENV.fetch('환경')}", '.env')

# 데이터베이스 설정을 로드하는 데 필요한 메서드
def db_configuration
  # 아래 메서드는 설정이 있는 파일의 경로를 반환합니다.
  db_configuration_file_path = File.join(File.expand_path('..', __dir__), 'db', 'config.yml')

  # 파일 경로를 알면 해당 값을 읽을 수 있습니다. config.yml
  # 파일에는 환경 변수가 포함되어 있으며, 눈치 채셨겠지만,
  #는 erb  구문을 사용하므로 erb gem도 사용해야 합니다. 이것이 없으면
  # 변수 값을 올바르게 읽지 못하고 액티버코드
  #가 postgres에 연결할 수 없으며 다음 메서드가 반환됩니다.
  # 구성을 문자열로 반환합니다.

  db_configuration_result = ERB.new(File.read(db_configuration_file_path)).result

  # 이전에 추가한 `yaml` 젬을 사용하여 구성을 안전하게 로드할 수 있습니다.

  YAML.safe_load(db_configuration_result, 별칭: true)
end

# 마지막으로, 액티버레코드와 포스트그레스 사이의 연결을 생성해야 합니다.
#를 `establish_connection` 메서드를 사용하여 연결합니다.
ActiveRecord::Base.establish_connection(db_configuration[ENV['ENVIRONMENT']])

모듈 Application
  class Error < StandardError; end
  # 코드가 여기...
end

이미 구성이 완료되었으므로 포스트 모델에 ruby 앱으로 이동합니다. 

`├── 앱`

`│ └── 모델`

`│ └── post.rb`
app/models/post.rb
# frozen_string_literal: true

class Post < ActiveRecord::Base;end

에 파일을 로드하는 것을 잊지 마십시오. application.rb

'앱/모델/포스트' 요구

또한 요구 사항을 추가하는 것을 잊지 마십시오. 'app/runner' 에 앱/애플리케이션.rb

애플리케이션, 서비스, 더 많은 모델에 새 파일을 추가하려면 다음에서 로드해야 합니다. application.rb.

요약

현재 루비 애플리케이션은 계속 사용할 준비가 되었습니다. 구성을 완료했습니다:

  • 데이터베이스 연결,
  • 활성 레코드,
  • 레이크를 사용한 독립형 마이그레이션

보시다시피, 항상 다음을 사용할 필요는 없습니다. 새로운 레일. 이렇게 하면 애플리케이션에서 사용되지 않는 불필요한 코드를 피할 수 있습니다. 애플리케이션 개발을 더 잘 제어할 수 있습니다. 시간이 지나면서 더 많은 라이브러리와 비즈니스 로직을 추가할 수 있습니다. 이렇게 구성된 애플리케이션을 사용하여 크롤러 또는 스크레이퍼를 만들고, 정보를 검색하여 자체 데이터베이스에 저장하거나 파일을 로드하고 흥미로운 정보를 추출할 외부 API에 연결할 수 있습니다. 여러분의 애플리케이션 개발에 행운이 함께 하기를 기원합니다!

보너스

애플리케이션도 어떻게든 시작해야 합니다. 예를 들어 터미널에서 여러 가지 방법으로 시작할 수 있습니다. 터미널에서 exe/app 파일에서 애플리케이션 로직을 로드하는 '앱/애플리케이션' 파일을 통해 애플리케이션을 실행하고 러너 서비스를 앱 디렉토리에 추가합니다.

#!/usr/bin/env ruby
# frozen_string_literal: true

'번들러/설정' 필요

$LOAD_PATH.unshift File.expand_path('..', __dir__)
'앱/애플리케이션' 요구

Runner.start
# frozen_string_literal: true

Runner 클래스
  def self.start
    '시작'을 넣습니다.
  end
end
루비 앱 개발

또한 다음을 추가하는 것을 잊지 마십시오. '앱/러너' 필요 에 앱/애플리케이션.rb

코드는 GitHub에서 찾을 수 있습니다:

– https://github.com/dwatek/simpleruby앱

자세히 보기

GraphQL Ruby. 성능은 어떨까요?

철도 및 기타 운송 수단

TMUX, Vim, Fzf + Ripgrep을 사용한 레일 개발

관련 문서

소프트웨어 개발

미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

최신
소프트웨어 개발

라트비아에 본사를 둔 10대 소프트웨어 개발 기업

최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

thecodest
엔터프라이즈 및 스케일업 솔루션

Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

thecodest
소프트웨어 개발

폴란드 아웃소싱을 위한 최고의 가이드

폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

더코데스트
엔터프라이즈 및 스케일업 솔루션

IT 감사 도구 및 기술에 대한 완벽한 가이드

IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean